[ZJJOI2013]K大数查询

链接

luogu

思路

整体二分。

代码

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll _=5e5+7;
ll read() {ll x=0,f=1;char s=getchar();for(;s>'9'||s<'0';s=getchar()) if(s=='-') f=-1;for(;s>='0'&&s<='9';s=getchar()) x=x*10+s-'0';return x*f;
}
ll n,m,ans[_];
struct OPT {ll opt,a,b,c,id;}Q[_],tmp1[_],tmp2[_];
namespace seg {#define ls rt<<1#define rs rt<<1|1struct node {ll l,r,lazy,siz;unsigned ll tot;}e[_<<2];void build(ll l,ll r,ll rt) {e[rt].l=l,e[rt].r=r,e[rt].siz=r-l+1;ll mid=(l+r)>>1;if(l==r) return;build(l,mid,ls);build(mid+1,r,rs);}void pushdown(ll rt) {if(e[rt].lazy) {e[ls].tot+=e[ls].siz*e[rt].lazy;e[rs].tot+=e[rs].siz*e[rt].lazy;e[ls].lazy+=e[rt].lazy;e[rs].lazy+=e[rt].lazy;e[rt].lazy=0;}}void modify(ll L,ll R,ll ad,ll rt) {if(L<=e[rt].l&&e[rt].r<=R) {e[rt].tot+=e[rt].siz*ad;e[rt].lazy+=ad;return;}ll mid=(e[rt].l+e[rt].r)>>1;pushdown(rt);if(L<=mid) modify(L,R,ad,ls);if(R>mid) modify(L,R,ad,rs);e[rt].tot=e[ls].tot+e[rs].tot;}unsigned ll query(ll L,ll R,ll rt) {if(L<=e[rt].l&&e[rt].r<=R) return e[rt].tot;ll mid=(e[rt].l+e[rt].r)>>1;unsigned ll ans=0;pushdown(rt);if(L<=mid) ans+=query(L,R,ls);if(R>mid) ans+=query(L,R,rs);return ans;}
}
void solve(ll l,ll r,ll vl,ll vr) {if(vl==vr||l>r) {for(ll i=l;i<=r;++i) ans[Q[i].id]=vl;return;}ll mid=(vl+vr)>>1,p=-1,q=-1;for(ll i=l;i<=r;++i) {if(Q[i].opt==1) {if(Q[i].c>mid) {seg::modify(Q[i].a,Q[i].b,1,1);tmp2[++q]=Q[i];} else tmp1[++p]=Q[i];} else {ll tmp=seg::query(Q[i].a,Q[i].b,1);if(Q[i].c<=tmp) tmp2[++q]=Q[i];else Q[i].c-=tmp,tmp1[++p]=Q[i];}}for(ll i=l;i<=r;++i)if(Q[i].opt==1&&Q[i].c>mid) seg::modify(Q[i].a,Q[i].b,-1,1);for(ll i=0;i<=p;++i) Q[l+i]=tmp1[i];for(ll i=0;i<=q;++i) Q[l+p+1+i]=tmp2[i];solve(l,l+p,vl,mid);solve(l+p+1,r,mid+1,vr);
}
int main() {n=read(),m=read();seg::build(1,n,1);ll cnt=0;for(ll i=1;i<=m;++i) {Q[i].opt=read();Q[i].a=read(),Q[i].b=read(),Q[i].c=read();if(Q[i].opt==2) Q[i].id=++cnt;  }solve(1,m,-n,n);for(ll i=1;i<=cnt;++i)printf("%lld\n",ans[i]);return 0;
}

转载于:https://www.cnblogs.com/dsrdsr/p/11405967.html

[ZJJOI2013]K大数查询 整体二分相关推荐

  1. BZOJ3110: [Zjoi2013]K大数查询(整体二分)

    Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c 如果是2 a b c形式,表示询问从第a个位置到第b个位 ...

  2. P3332 [ZJOI2013]K大数查询 - 整体二分-区间修改

    题目链接:https://www.luogu.com.cn/problem/P3332 思路:我们区间修改用一个线段树维护就可以了. #include <bits/stdc++.h> us ...

  3. P3332 [ZJOI2013]K大数查询(整体二分做法)

    P3332 [ZJOI2013]K大数查询 题意: 题解: 利用整体二分来做,这个题和P3834 [模板]可持久化线段树 2的区别在于本题的修改是区间修改,所以将里面的树状数组改成线段树就行,区间修改 ...

  4. 洛谷 P3332 [ZJOI2013]K大数查询 解题报告

    P3332 [ZJOI2013]K大数查询 题目描述 有\(N\)个位置,\(M\)个操作.操作有两种,每次操作如果是\(\tt{1\ a\ b\ c}\)的形式表示在第\(a\)个位置到第\(b\) ...

  5. BZOJ3110: [Zjoi2013]K大数查询

    BZOJ3110: [Zjoi2013]K大数查询 Description 有N个位置,M个操作. 操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c 如 ...

  6. bzoj3110 [Zjoi2013]K大数查询

    3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec  Memory Limit: 512 MB Submit: 10703  Solved: 3209 [Submit][ ...

  7. 3110: [Zjoi2013]K大数查询

    3110: [Zjoi2013]K大数查询 https://lydsy.com/JudgeOnline/problem.php?id=3110 分析: 整体二分+线段树. 两种操作:区间加入一个数,区 ...

  8. python【蓝桥杯vip练习题库】ALGO-1区间k大数查询

    试题 算法训练 区间k大数查询 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个. 输入格式 第一行包含一个数n,表示 ...

  9. 蓝桥杯-区间k大数查询(java)

    算法训练 区间k大数查询 时间限制:1.0s 内存限制:256.0MB问题描述给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个.输入格式第一行包含一个数n,表示序列长度.第二行包含n个 ...

最新文章

  1. Cocos Creator 的 动作(Action)系统:moveBy的使用
  2. 智能生产的现状与未来!
  3. Android超简单的进度条源码
  4. 提现接口网站 php,API提现接口
  5. OpenCV实战5: LBP级联分类器实现人脸检测
  6. VS2017 修改文件编码为UTF-8的插件
  7. shell---登录失败的IP添加到/etc/hosts.deny
  8. 【Codeforces 1344 A】Hilbert‘s Hotel,哈希表,set维护
  9. 时间变为.05PU sql长度写法
  10. C语言实现俄罗斯方块
  11. 取色工具ColorPix
  12. github与git 实现多人开发的配置,使用htps和ssh两种方式
  13. 怎么看守望先锋服务器位置,守望先锋左上运行参数详解 教你如何看懂运行参数...
  14. Java用最少代码实现五子棋-玩家对战模式-人机对战模式-电脑策略对战
  15. 交换机和路由器技术-15-链路聚合
  16. 计算机综合训练50题4,-计算机基础练习题-Excel部分50题.doc
  17. python小游戏之垃圾分类
  18. Dynamic Programming?老牛吃药
  19. 字符串删除开头部分数字
  20. Mali-T860 GPU开源驱动

热门文章

  1. 组件切换方式(Vue.js)
  2. Node 之 模块加载原理与加载方式
  3. [转]xargs详解
  4. C#与mongoDB初始环境搭建
  5. 【坑】执行Consumer的时候发生java.net.UnknownHostException错误
  6. 用汇编语言写的第一个DOS程序
  7. Java中的传值与传引用
  8. 免费的.NET混淆和反编译工具
  9. 【记】jQuery中的选择器:visible对visibility:hidden的处理
  10. css:学习CSS了解单位em和px的区别