【bzoj3110】[Zjoi2013]K大数查询
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操作中abs(c)<=Maxlongint
- #include<cstdio>
- #include<iostream>
- #include<cstdlib>
- #include<algorithm>
- #include<cstring>
- #define ll long long
- using namespace std;
- int a,b,c;
- int n,m,sz;
- int root[];
- int ls[],rs[],sum[],lazy[];
- void pushdown(int k,int l,int r){
- if ((!lazy[k])||l==r) return;//如果没标记或者已经到了底层
- if (!ls[k])ls[k]=++sz;
- if (!rs[k])rs[k]=++sz;
- int mid=(l+r)>>;
- lazy[ls[k]]+=lazy[k];lazy[rs[k]]+=lazy[k];
- sum[ls[k]]+=(mid-l+)*lazy[k];
- sum[rs[k]]+=(r-mid)*lazy[k];
- lazy[k]=;
- }
- void modify(int &k,int l,int r,int a,int b){
- if (!k)k=++sz;
- pushdown(k,l,r);
- if (a==l&&b==r){
- lazy[k]++;
- sum[k]+=(r-l+);
- return;
- }
- int mid=(l+r)>>;
- if (a>mid) modify(rs[k],mid+,r,a,b);
- else if (b<=mid) modify(ls[k],l,mid,a,b);
- else modify(ls[k],l,mid,a,mid),modify(rs[k],mid+,r,mid+,b);
- sum[k]=sum[ls[k]]+sum[rs[k]];
- }
- void insert(){
- int l=,r=n,k=;
- while (l!=r){
- modify(root[k],,n,a,b);
- int mid=(l+r)>>;
- if (c>mid)l=mid+,k=k<<|;
- else r=mid,k=k<<;
- }
- modify(root[k],,n,a,b);
- }
- int query(int k,int l,int r,int a,int b){
- if (!k) return ;
- pushdown(k,l,r);
- if (a==l&&b==r)return sum[k];
- int mid=(l+r)>>;
- if (a>mid) return query(rs[k],mid+,r,a,b);
- else if (b<=mid) return query(ls[k],l,mid,a,b);
- else return query(ls[k],l,mid,a,mid)+query(rs[k],mid+,r,mid+,b);
- }
- int solve(){
- int l=,r=n,k=;
- while (l!=r){
- int t=query(root[k<<],,n,a,b);
- int mid=(l+r)>>;
- if (t>=c)r=mid,k=k<<;
- else l=mid+,k=k<<|,c-=t;
- }
- return l;
- }
- int main(){
- freopen("sj.txt","r",stdin);
- freopen("me.txt","w",stdout);
- scanf("%d%d",&n,&m);
- for (int i=;i<=m;i++){
- int f;
- scanf("%d%d%d%d",&f,&a,&b,&c);
- if (f==)c=n-c+,insert();
- else printf("%d\n",n-solve()+);
- }
- }
【bzoj3110】[Zjoi2013]K大数查询的更多相关文章
- BZOJ3110[Zjoi2013]K大数查询(树状数组+整体二分)
3110 [Zjoi2013]K大数查询 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c如果是2 a b c形式,表示询问从第a ...
- BZOJ3110 [Zjoi2013]K大数查询 树套树 线段树 整体二分 树状数组
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ3110 题意概括 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位 ...
- BZOJ3110: [Zjoi2013]K大数查询
喜闻乐见的简单树套树= =第一维按权值建树状数组,第二维按下标建动态开点线段树,修改相当于第二维区间加,查询在树状数组上二分,比一般的线段树还短= =可惜并不能跑过整体二分= =另外bzoj上的数据有 ...
- [BZOJ3110][ZJOI2013]K大数查询(整体二分)
BZOJ Luogu sol 整体二分,其实很简单的啦. 对所有询问二分一个答案mid,把所有修改操作中数字大于mid的做一个区间覆盖(区间加1) 查询就是区间查询 然后左右分一分即可 注意是第k大 ...
- BZOJ3110[Zjoi2013]K大数查询——权值线段树套线段树
题目描述 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数是 ...
- bzoj3110: [Zjoi2013]K大数查询 【树套树,标记永久化】
//========================== 蒟蒻Macaulish:http://www.cnblogs.com/Macaulish/ 转载要声明! //=============== ...
- bzoj3110 [Zjoi2013]K大数查询——线段树套线段树
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3110 外层权值线段树套内层区间线段树: 之所以外层权值内层区间,是因为区间线段树需要标记下传 ...
- bzoj3110: [Zjoi2013]K大数查询 【cdq分治&树套树】
模板题,折腾了许久. cqd分治整体二分,感觉像是把询问分到答案上. #include <bits/stdc++.h> #define rep(i, a, b) for (int i = ...
- BZOJ3110:[ZJOI2013]K大数查询(整体二分)
Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c.如果是2 a b c形式,表示询问从第a个位置到第b个位 ...
- 【树套树】bzoj3110 [Zjoi2013]K大数查询
题解很多,实现起来以外地简洁.内层的区间线段树上用了标记永久化. #include<cstdio> using namespace std; #define N 50001 struct ...
随机推荐
- x264命令参数与代码中变量的对应关系
帧类型选项: -I/--keyint i_keyint_max 最大IDR帧间距,默认为250 -i/--min-keyint i_keyint_min 最小IDR帧间距,默认为25 --sce ...
- Codeforces Round #191 (Div. 2)
在div 188中,幸运的达成了这学期的一个目标:CF1800+,所以这次可以打星去做div2,有点爽. A.Flipping Game 直接枚举 B. Hungry Sequence 由于素数的分布 ...
- css3 巧用结构性伪类选择器
最近在国外的一个网站上看到的一个关于结构性伪类选择器的用法,觉得十分实用,就自己尝试了一下,并把它给记录下来: 这是最基本的样式: <style type="text/css" ...
- CSS3秘笈第三版涵盖HTML5学习笔记13~17章
第13章,构建基于浮动的布局 使用的是float(浮动)属性 注:float:none值将取消所有浮动,通常只用来取消元素中已经应用的浮动. 切记:不需要给正文的div设计宽度,即使设计成固定宽度也不 ...
- 我的jquery之路
不知不觉jquery已经看完了. 以前不知道jquery是什么,现在依然不是很清晰.或许学习的结果就是这样吧,忘记你所学的.
- Networking - ICMP 协议
发送到远程计算机的数据通常发经过一个或多个路由器,这些路由器在把数据传输到最终目的地的过程中可能发生多种问题.路由器利用 ICMP 把问题通知给源 IP.ICMP 还有用于其他调试和排错的功能. IC ...
- 让无线网卡同时工作在 AP 和 STA 模式
这个帖子里的方法有点过时了,不推荐继续使用. 有的时候会碰到这么一种情况,带着电脑和手机出去蹭网,无奈只有一个账号,手机上了电脑就没得用了,电脑用了手机就上不了网.如果能用电脑连接 Wifi 然后再开 ...
- Ajax之数据连接信息捕获
connDB.properties: DB_CLASS_NAME=com.mysql.jdbc.Driver DB_URL=jdbc:mysql://127.0.0.1:3306/db_datab ...
- mvc Web api 如何在控制器中调用
关于如何调用 mvc Web api 的方法,网上一搜就是一大把,基本都是在前台jq中调用的,但是如何在后台调用呢? 本楼主做了一下测试,仅供参考. 先写一个简单的api,如下:[域1] namesp ...
- css3学习笔记之用户界面
CSS3 调整尺寸(Resizing) CSS3中,resize属性指定一个元素是否应该由用户去调整大小. 这个 div 元素由用户调整大小. (在 Firefox 4+, Chrome, 和 Saf ...