码蹄集部分题目(2024OJ赛9.4-9.8;线段树+树状数组)

1🐋🐋配对最小值(王者;树状数组)

时间限制:1秒

占用内存:64M

🐟题目思路

MT3065 配对最小值_哔哩哔哩_bilibili

🐟代码

#include<bits/stdc++.h> 
using namespace std;
const int N=1e5+7;
int a[N],b[N],c[N],n,q;
struct QUERY{int l,r,id;
}query[N];
vector<pair<int,int> > items;
int lowbit(int x){return x&(-x);}
void update(int i,int x){for(;i<=n;i+=lowbit(i)) c[i]+=x;
}
int sum(int i){int ans=0;for(;i>0;i-=lowbit(i)) ans+=c[i];return ans;
}
bool cmp1(int x,int y){return a[x]<a[y];}
bool cmp2(pair<int,int> a,pair<int,int> b){return a.first>b.first;}
bool cmp3(QUERY a,QUERY b){return a.l>b.l;}
int main( )
{cin>>n>>q;for(int i=1;i<=n;i++){cin>>a[i];b[i]=i;}sort(b+1,b+1+n,cmp1);items.push_back({b[1],b[2]});items.push_back({b[n-1],b[n]});for(int i=2;i<n;i++){int val1=a[b[i]]-a[b[i-1]];int val2=a[b[i+1]]-a[b[i]];if(val1<=val2) items.push_back({b[i],b[i-1]});if(val2<=val1) items.push_back({b[i],b[i+1]});}for(auto &it:items)if(it.first>it.second)swap(it.first,it.second);sort(items.begin(),items.end(),cmp2);//降序for(int i=1;i<=q;i++) cin>>query[i].l>>query[i].r,query[i].id=i;sort(query+1,query+1+q,cmp3);int pos=0;long long ans=0;for(int i=1;i<=q;i++){while(pos<items.size()&&query[i].l<=items[pos].first)update(items[pos++].second,1);ans+=query[i].id*sum(query[i].r);}cout<<ans;return 0;
}

2🐋🐋三元组逆序对(星耀;树状数组)

时间限制:1秒

占用内存:64M

🐟题目思路

MT3067 三元组逆序对_哔哩哔哩_bilibili

🐟代码

#include<bits/stdc++.h> 
using namespace std;
#define int long long
const int N=5e5+7;
int n,a[N],tmp[N],c[N],ans,pre[N],suf[N];
int lowbit(int x){return x&(-x);}
void update(int i,int x){for(;i<=n;i+=lowbit(i)) c[i]+=x;
}
int sum(int i){int ans=0;for(;i>0;i-=lowbit(i)) ans+=c[i];return ans;
}
int sum(int l,int r){return sum(r)-sum(l-1);}signed main( )
{cin>>n;for(int i=1;i<=n;i++) cin>>a[i];//离散化for(int i=1;i<=n;i++) tmp[i]=a[i];sort(tmp+1,tmp+1+n);int len=unique(tmp+1,tmp+1+n)-(tmp+1);for(int i=1;i<=n;i++) a[i]=lower_bound(tmp+1,tmp+1+len,a[i])-tmp;//顺着看,前面多少数比自己大for(int i=1;i<=n;i++){update(a[i],1);pre[i]=sum(a[i]+1,n);}memset(c,0,sizeof(c));//逆着看,前面多少数比自己小for(int i=n;i>=1;i--){update(a[i],1);suf[i]=sum(a[i]-1);}for(int i=1;i<=n;i++) ans+=pre[i]*suf[i];cout<<ans;return 0;
}

3🐋🐋粉刷匠(星耀;线段树)

时间限制:1秒

占用内存:64M

🐟题目思路

MT3068 粉刷匠_哔哩哔哩_bilibili

🐟代码

#include<bits/stdc++.h> 
using namespace std;
const int N=5e4+10;
int a[N][15];
//num1初始化后的固定属性,相应区域1的个数;lz懒标记;ans是正确的个数,动态变化
struct NODE{int l,r,num1,lz,ans;
}tree[16][4*N];
void build(int tr,int p,int l,int r){tree[tr][p].lz=-1;tree[tr][p].l=l,tree[tr][p].r=r;if(l==r){tree[tr][p].num1=a[l][tr];tree[tr][p].ans=(a[l][tr]==0?1:0);return;}int mid=l+((r-l)>>1);build(tr,p*2,l,mid);build(tr,p*2+1,mid+1,r);tree[tr][p].num1=tree[tr][p*2].num1+tree[tr][p*2+1].num1;tree[tr][p].ans=tree[tr][p*2].ans+tree[tr][p*2+1].ans;
}
void lazy(int tr,int p,int v){int s=tree[tr][p].l,t=tree[tr][p].r;tree[tr][p].lz=v;if(v) tree[tr][p].ans=tree[tr][p].num1;else tree[tr][p].ans=t-s+1-tree[tr][p].num1;
}
void pushdown(int tr,int p){lazy(tr,2*p,tree[tr][p].lz);lazy(tr,2*p+1,tree[tr][p].lz);tree[tr][p].lz=-1;
}
void update(int tr,int p,int l,int r,int c){int s=tree[tr][p].l,t=tree[tr][p].r;if(l<=s&&t<=r) return lazy(tr,p,c);if(tree[tr][p].lz!=-1) pushdown(tr,p);int mid=s+((t-s)>>1);if(l<=mid) update(tr,p*2,l,r,c);if(r>mid) update(tr,p*2+1,l,r,c);tree[tr][p].ans=tree[tr][p*2].ans+tree[tr][p*2+1].ans;
}
int main( )
{int n,m,q;string str;cin>>n>>m>>q;for(int i=1;i<=n;i++){cin>>str;for(int j=1;j<=m;j++) a[i][j]=str[j-1]-'0';}for(int i=1;i<=m;i++) build(i,1,1,n);while(q--){int x1,x2,y1,y2,w,ans=0;cin>>x1>>x2>>y1>>y2>>w;for(int i=y1;i<=y2;i++) update(i,1,x1,x2,w);for(int i=1;i<=m;i++) ans+=tree[i][1].ans;cout<<ans<<endl;}return 0;
}

4🐋🐋偶数个数的异或和(星耀;树状数组)

时间限制:2秒

占用内存:125M

🐟题目思路

MT3066 偶数个数的异或和_哔哩哔哩_bilibili

🐟代码

#include<bits/stdc++.h> 
using namespace std;
const int N=1e6+7;
int n,a[N],c[N],sum[N],m,ans[N];
map<int,int> mp;
int lowbit(int x){return x&-x;}
void update(int i,int x){for(;i<=n;i+=lowbit(i)) c[i]^=x;
}
int query(int i){int ans=0;for(;i>0;i-=lowbit(i)) ans^=c[i];return ans;
}
struct QUERY{int l,r,id;bool operator<(const QUERY &x) const{return r<x.r;}
}q[N];
int main( )
{cin>>n;for(int i=1;i<=n;i++){cin>>a[i];sum[i]=sum[i-1]^a[i];}cin>>m;for(int i=1;i<=m;i++){cin>>q[i].l>>q[i].r;q[i].id=i;}sort(q+1,q+1+m);int pos=1;for(int i=1;i<=m;i++){while(pos<=q[i].r){if(mp.find(a[pos])!=mp.end()){update(mp[a[pos]],a[pos]);update(pos,a[pos]);mp[a[pos]]=pos;}else{mp[a[pos]]=pos;update(pos,a[pos]);}pos++;}ans[q[i].id]=sum[q[i].l-1]^sum[q[i].r]^query(q[i].r)^query(q[i].l-1);}for(int i=1;i<=m;i++) cout<<ans[i]<<endl;return 0;
}

5🐋🐋宝石的魔力波动(星耀;线段树)

时间限制:3秒

占用内存:512M

🐟题目思路

MT3069 宝石的魔力波动_哔哩哔哩_bilibili

🐟代码

#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
struct NODE
{int l, r, cnt, lz;vector<int> val;
} tree[4 * N];
int n, m, a[N];
vector<int> ans;
void lazy(int p, int v)
{tree[p].lz += v;for (int i = 0; i < tree[p].cnt; i++){tree[p].val[i] += v;}
}
void pushdown(int p)
{lazy(p * 2, tree[p].lz);lazy(p * 2 + 1, tree[p].lz);tree[p].lz = 0;
}
void pushup(int p)
{vector<int> tmp;int i = 0, j = 0;int cnt_l = tree[p * 2].cnt, cnt_r = tree[p * 2 + 1].cnt;vector<int> val_l = tree[p * 2].val, val_r = tree[p * 2 + 1].val;while (i < cnt_l && j < cnt_r){tmp.emplace_back(val_l[i] > val_r[j] ? val_l[i++] : val_r[j++]);}while (i < cnt_l)tmp.emplace_back(val_l[i++]);while (j < cnt_r)tmp.emplace_back(val_r[j++]);tree[p].val.clear();for (int i = 0; i < tree[p].cnt; i++){tree[p].val.emplace_back(tmp[i]);}
}
void build(int p, int l, int r)
{tree[p].l = l, tree[p].r = r;if (l == r){tree[p].cnt = 1;tree[p].val.emplace_back(a[l]);return;}int mid = l + ((r - l) >> 1);build(p * 2, l, mid);build(p * 2 + 1, mid + 1, r);tree[p].cnt = min(tree[p * 2].cnt + tree[p * 2 + 1].cnt, 36);pushup(p);
}
void update(int l, int r, int c, int p)
{int s = tree[p].l, t = tree[p].r;if (l <= s && t <= r){return lazy(p, c);}if (tree[p].lz)pushdown(p);int mid = s + ((t - s) >> 1);if (l <= mid)update(l, r, c, p * 2);if (r > mid)update(l, r, c, p * 2 + 1);pushup(p);
}
void merge(int p)
{vector<int> tmp;int i = 0, j = 0, cnt = tree[p].cnt;vector<int> val = tree[p].val;while (i < cnt && j < ans.size()){tmp.emplace_back(val[i] > ans[j] ? val[i++] : ans[j++]);}while (i < cnt)tmp.emplace_back(val[i++]);while (j < ans.size())tmp.emplace_back(ans[j++]);ans.clear();for (int i = 0; i < min((int)tmp.size(), 36); i++)ans.emplace_back(tmp[i]);
}
void query(int l, int r, int p)
{int s = tree[p].l, t = tree[p].r;if (l <= s && t <= r){merge(p);return;}if (tree[p].lz)pushdown(p);int mid = s + ((t - s) >> 1);if (l <= mid)query(l, r, p * 2);if (r > mid)query(l, r, p * 2 + 1);return;
}
int op, l, r, v;
int main()
{cin >> n >> m;for (int i = 1; i <= n; i++)cin >> a[i];build(1, 1, n);while (m--){cin >> op >> l >> r;if (op == 1){cin >> v;update(l, r, v, 1);}else{if (l == r){cout << "-1" << endl;continue;}ans.clear();query(l, r, 1);int res = 0;for (int i = 0; i < ans.size(); i++)for (int j = i + 1; j < ans.size(); j++)res = max(res, ans[i] & ans[j]);cout << res << endl;}}return 0;
}

创作不易,点个赞吧~

点赞收藏不迷路~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1527655.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

[数据集][目标检测]血细胞检测数据集VOC+YOLO格式2757张4类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2757 标注数量(xml文件个数)&#xff1a;2757 标注数量(txt文件个数)&#xff1a;2757 标注…

浙大数据结构:02-线性结构4 Pop Sequence

这道题我们采用数组来模拟堆栈和队列。 简单说一下大致思路&#xff0c;我们用栈来存1234.....&#xff0c;队列来存输入的一组数据&#xff0c;栈与队列进行匹配&#xff0c;相同就pop 机翻 1、条件准备 stk是栈&#xff0c;que是队列。 tt指向的是栈中下标&#xff0c;fr…

【系统设计】主动查询与主动推送:如何选择合适的数据传输策略

基本描述总结 主动查询机制&#xff1a;系统A主动向系统B请求数据&#xff0c;采用严格的权限控制和身份认证&#xff0c;防止未授权的数据访问。数据在传输过程中使用TLS加密&#xff0c;并通过动态脱敏处理隐藏敏感信息。 推送机制&#xff1a;系统B在数据更新时主动向系统…

Java并发编程实战 05 | 什么是线程组?

1.线程组介绍 在 Java 中&#xff0c;ThreadGroup 用于表示一组线程。通过 ThreadGroup&#xff0c;我们可以批量控制和管理多个线程&#xff0c;使得线程管理更加方便。 ThreadGroup 和 Thread 的关系就像它们的字面意思一样简单&#xff1a;每个线程 (Thread) 必定属于一个线…

基于R语言的统计分析基础:操作XML文件与YAML文件

XML文件简介 在处理从文本文件中读取数据的任务时&#xff0c;用户承担着至关重要的责任&#xff0c;即需要充分理解和明确指定在创建该文件时所遵循的一系列约定和规范。这些约定涵盖了多个方面&#xff0c;包括但不限于&#xff1a; 注释字符&#xff1a;识别并忽略文件中用…

kubeadm 初始化 k8s 证书过期解决方案

概述 在使用 kubeadm 初始化的 Kubernetes 集群中&#xff0c;默认情况下证书的有效期为一年。当证书过期时&#xff0c;集群中的某些组件可能会停止工作&#xff0c;导致集群不可用。本文将详细介绍如何解决 kubeadm 初始化的 Kubernetes 集群证书过期的问题&#xff0c;并提…

CSP-J基础之常见的竞赛题库

文章目录 CSP-J基础之常见的竞赛题库1. 可达 (KEDA)2. 洛谷 (Luogu)3. Codeforces 洛谷账号的注册总结 CSP-J基础之常见的竞赛题库 在备战CSP-J&#xff08;Certified Software Professional Junior&#xff09;及其他信息学竞赛时&#xff0c;选手们常需要借助在线题库来进行…

android framework工程师遇到成长瓶颈迷茫怎么办?千里马经验分享

背景 近来有一些framework老司机粉丝朋友发来了一些framework工作中的一些疑问&#xff0c;具体描述如下&#xff1a; 这个同学遇到的问题&#xff0c;其实就是大部分framework开发者工作比较久后遇到的一个上升瓶颈问题。 具体总结有以下几个瓶颈问题 1、framework属于系…

Clion不识别C代码或者无法跳转C语言项目怎么办?

如果是中文会显示&#xff1a; 此时只需要右击项目&#xff0c;或者你的源代码目录&#xff0c;将这个项目或者源码目录标记为项目源和头文件即可。 英文如下&#xff1a;

STM32内部闪存FLASH(内部ROM)、IAP

1 FLASH简介 1 利用程序存储器的剩余空间来保存掉电不丢失的用户数据 2 通过在程序中编程(IAP)实现程序的自我更新 &#xff08;OTA&#xff09; 3在线编程&#xff08;ICP把整个程序都更新掉&#xff09; 1 系统的Bootloader写死了&#xff0c;只能用串口下载到指定的位置&a…

【MacOS】mac定位服务中删除已经卸载的软件

mac定位服务中删除已经卸载的软件 网上的帖子真不靠谱 直接右键 WeTypeSettings &#xff0c;查找位置&#xff0c;丢废纸篓即可&#xff01;会提示你卸载的&#xff01;

VLAN原理学习笔记

以太网是一种基于CSMA/CD的数据网络通信技术&#xff0c;其特征是共享通信介质。当主机数目较多时会导致安全隐患、广播泛滥、性能显著下降甚至造成网络不可用。 在这种情况下出现了VLAN (Virtual Local Area Network)技术解决以上问题。 1、VLAN快速配置 Vlan:Virtual Local…

C和指针:结构体(struct)和联合(union)

结构体和联合 结构体 结构体包含一些数据成员&#xff0c;每个成员可能具有不同的类型。 数组的元素长度相同&#xff0c;可以通过下标访问(转换为指针)。但是结构体的成员可能长度不同&#xff0c;所以不能用下标来访问它们。成员有自己的名字&#xff0c;可以通过名字访问…

springboot流浪天使乐园管理系统

基于springbootvue实现的流浪天使乐园管理系统&#xff08;源码L文ppt&#xff09;4-039 第4章 系统设计 4.1 总体功能设计 一般个人用户和管理者都需要登录才能进入流浪天使乐园管理系统&#xff0c;使用者登录时会在后台判断使用的权限类型&#xff0c;包括一般使用者…

以太网交换机工作原理学习笔记

在网络中传输数据时需要遵循一些标准&#xff0c;以太网协议定义了数据帧在以太网上的传输标准&#xff0c;了解以太网协议是充分理解数据链路层通信的基础。以太网交换机是实现数据链路层通信的主要设备&#xff0c;了解以太网交换机的工作原理也是十分必要的。 1、以太网协议…

Qt/C++编写的Onvif调试助手调试神器工具/支持云台控制/预置位设置等/有手机版本

一、功能特点 广播搜索设备&#xff0c;支持IPC和NVR&#xff0c;依次返回。可选择不同的网卡IP进行对应网段设备的搜索。依次获取Onvif地址、Media地址、Profile文件、Rtsp地址。可对指定的Profile获取视频流Rtsp地址&#xff0c;比如主码流地址、子码流地址。可对每个设备设…

ESP32_获取心知天气

目录 前言 一、获取心知天气API 二、编写代码 1.下载代码 2.代码讲解 1.安装Arduino.Json库 2.输入WIFI名称和密码 3.添加API 4.关于API的补充 三.数据的打印和处理 1.获取的数据 2.数据输出 总结 前言 环境&#xff1a;Arduino 芯片&#xff1a;ESP32 软件&…

基于springboot+vue实现的农家乐管理系统

基于springbootvue实现的山庄农家乐管理系统前后端分离项目&#xff08;文末查看源码lw&#xff09;4-10 系统角色&#xff1a; 管理员、用户 主要功能&#xff1a; &#xff08;1&#xff09;用户关键功能包含用户注册登陆、个人信息修改、首页、农家乐、美食信息、民宿信息…

【LeetCode】20.有效的括号

题目要求 解题思路 利用栈来解决本道题&#xff0c;左括号进栈&#xff0c;右括号出栈。需要判断第一个字符是右括号的情况 代码实现 class Solution { public:bool isValid(string s) {//利用栈来解决stack<char> st;for(auto& e:s){//是左括号就进if(e(||e[||…

SpringBoot开启多端口探究--基于多ApplicationContext

文章目录 前情提要一、思路概要二、具体实现三、其他问题父子关系部分依赖 总结 前情提要 前面探讨了management端口开启&#xff0c;grpc端口开启&#xff0c;本文继续探讨在SpringApplication中开启多个端口的方式之多ApplicationContext, 相比management端口基于多WebServe…