[BZOJ3110] [Zjoi2013]K大数查询
3110: [Zjoi2013]K大数查询
Time Limit: 20 Sec Memory Limit: 512 MB Submit: 9208 Solved: 2737 [Submit][Status][Discuss]
Description
有N个位置,M个操作。操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c 如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数是多少。
Input
第一行N,M 接下来M行,每行形如1 a b c或2 a b c
Output
输出每个询问的结果
Sample Input
1 1 2 1
1 1 2 2
2 1 1 2
2 1 1 1
2 1 2 3
Sample Output
2
1
HINT
【样例说明】
第一个操作 后位置 1 的数只有 1 , 位置 2 的数也只有 1 。 第二个操作 后位置 1
的数有 1 、 2 ,位置 2 的数也有 1 、 2 。 第三次询问 位置 1 到位置 1 第 2 大的数 是
1 。 第四次询问 位置 1 到位置 1 第 1 大的数是 2 。 第五次询问 位置 1 到位置 2 第 3
大的数是 1 。
N,M<=50000,N,M<=50000
a<=b<=N
1操作中abs(c)<=N
2操作中c<=Maxlongint
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<cstdlib> 5 #include<cmath> 6 #include<algorithm> 7 #define M 15000000 8 using namespace std; 9 long long read() 10 { 11 long long x=0,f=1;char ch=getchar(); 12 while(!isdigit(ch)){if(ch=='-') f=-1;ch=getchar();} 13 while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();} 14 return x*f; 15 } 16 long long cnt=0; 17 long long n,m; 18 long long a,b,c; 19 long long root[200005],sum[M],ls[M],rs[M],lazy[M]; 20 void add(long long &now,long long l,long long r,long long L,long long R) 21 { 22 if(!now) now=++cnt; 23 long long mid=(l+r)>>1; 24 if(l>=L&&r<=R){sum[now]+=r-l+1,lazy[now]++; return;} 25 if(L<=mid)add(ls[now],l,mid,L,R); 26 if(R>mid)add(rs[now],mid+1,r,L,R); 27 sum[now]+=min(R,r)-max(L,l)+1; 28 } 29 long long ask(long long now,long long l,long long r,long long L,long long R) 30 { 31 if(!now) return 0; 32 long long mid=(l+r)>>1; 33 if(l>=L&&r<=R) return sum[now]; 34 long long ans=0; 35 if(L<=mid) ans+=ask(ls[now],l,mid,L,R); 36 if(R>mid)ans+=ask(rs[now],mid+1,r,L,R); 37 return ans+(min(R,r)-max(L,l)+1)*lazy[now]; 38 } 39 void insert() 40 { 41 long long l=1,r=n,now=1; 42 while(l<r) 43 { 44 long long mid=(l+r)>>1; 45 add(root[now],1,n,a,b); 46 if(c<=mid) r=mid,now<<=1; 47 else l=mid+1,now=(now<<1)+1; 48 } 49 add(root[now],1,n,a,b); 50 } 51 long long query() 52 { 53 long long l=1,r=n,now=1; 54 while(l<r) 55 { 56 long long mid=(l+r)>>1; 57 now<<=1; 58 long long k=ask(root[now+1],1,n,a,b); 59 if(k>=c) l=mid+1,now++; 60 else r=mid,c-=k; 61 } 62 return l; 63 } 64 int main() 65 { 66 n=read(),m=read(); 67 while(m--) 68 { 69 long long flag=read();a=read(),b=read(),c=read(); 70 if(flag==1) insert(); 71 else printf("%lld\n",query()); 72 } 73 }
View Code
转载于:https://www.cnblogs.com/wls001/p/7553690.html
[BZOJ3110] [Zjoi2013]K大数查询相关推荐
- BZOJ3110: [Zjoi2013]K大数查询
BZOJ3110: [Zjoi2013]K大数查询 Description 有N个位置,M个操作. 操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c 如 ...
- bzoj3110 [Zjoi2013]K大数查询
3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec Memory Limit: 512 MB Submit: 10703 Solved: 3209 [Submit][ ...
- bzoj3110: [Zjoi2013]K大数查询 【树套树,标记永久化】
//========================== 蒟蒻Macaulish:http://www.cnblogs.com/Macaulish/ 转载要声明! //=============== ...
- BZOJ3110: [Zjoi2013]K大数查询(整体二分)
Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c 如果是2 a b c形式,表示询问从第a个位置到第b个位 ...
- 洛谷 P3332 [ZJOI2013]K大数查询 解题报告
P3332 [ZJOI2013]K大数查询 题目描述 有\(N\)个位置,\(M\)个操作.操作有两种,每次操作如果是\(\tt{1\ a\ b\ c}\)的形式表示在第\(a\)个位置到第\(b\) ...
- P3332 [ZJOI2013]K大数查询(整体二分做法)
P3332 [ZJOI2013]K大数查询 题意: 题解: 利用整体二分来做,这个题和P3834 [模板]可持久化线段树 2的区别在于本题的修改是区间修改,所以将里面的树状数组改成线段树就行,区间修改 ...
- 3110: [Zjoi2013]K大数查询
3110: [Zjoi2013]K大数查询 https://lydsy.com/JudgeOnline/problem.php?id=3110 分析: 整体二分+线段树. 两种操作:区间加入一个数,区 ...
- bzoj 3110: [Zjoi2013]K大数查询(树套树)
树套树: 本质:一棵树的每个节点套着另一棵树 通常时间复杂度:O(nlog²n) 空间复杂度:因为树的大小是nlogn,而每个节点又有一棵nlogn的树,所以最大空间复杂度为O(n²log²) 但事实 ...
- [ZJOI2013]K大数查询
Description: 给定一个序列,支持两种操作 1.在[L,R]的每个位置上加上一个数 (注意一个位置上有多个数) 2.查询[L,R]上所有数中的第K大 Hint: \(n,m<=5e4\ ...
最新文章
- BZOJ2494 Triangles and Quadrangle
- POJ 1944 - Fiber Communications
- 计算机系统加固方法有哪些,计算机系统的加固 .doc
- FFMPEG音视频同步-音频实时采集编码封装成MP4
- Java8--Lambda表达式对List集合操作
- Policy-based RL小结(Policy Gradient ; Natural policy gradient ;TRPO;ACKTR;PPO )
- halcon直线标定板对相机标定的效果评估(对比矫正前后、对比标定板矫正效果)
- URL转微信可识别的二维码
- python 二叉树递归时明明已经得到了结果,但是返回None
- php执行查询的代码,PHP实现动态执行代码的方法
- IDEA类和方法注释模板设置(非常详细)
- CVPR 2021 论文和开源项目合集
- C语言之基本算法34—分解质因数(方法一)
- 镜头MTF值的基本原理和解读
- 《软件设计师》复习总结
- 定位弹窗软件----找到真凶并做后续防御
- 基于云服务器 B/S模式 JavaWeb RFID 图书借阅管理系统
- 集合之ArrayDeque
- JAVA基础语法笔记(黑马程序员系列)
- 我想当计算机工程师英语翻译,工程师英语怎么说
热门文章
- java 集合 总结 表_java 列表与集合总结
- java 中的string_Java中String揭秘
- End-to-end Recovery of Human Shape and Pose
- 19复变函数的积分(五)
- 【java】矩阵的求解
- Python进程间通信之管道Pipe
- python添加一个球_在Python中创建一个旋转球体
- 文本分类器,可自由加载BERT、Bert-wwm、Roberta、ALBert以及ERNIE1.0
- 基于R-Net、QA-Net和BiDAF实现中文观点型问题机器阅读理解
- jquery如何拿到一个对象_jQuery 怎么获取对象