题意:带修改的第K大

  1. #include<cstdio>
  2. #include<iostream>
  3. #include<cstring>
  4. #define N 400010
  5. #define inf 1000000000
  6. using namespace std;
  7. int a[N],ans[N],sum[N],tmp[N],n,m,num,cnt;
  8. struct node{
  9. int x,y,s,k,tp,cur;
  10. };node q[N],q1[N],q2[N];
  11. void modify(int x,int v){
  12. while(x<=n){
  13. sum[x]+=v;
  14. x+=x&(-x);
  15. }
  16. }
  17. int query(int x){
  18. int tot=;
  19. while(x){
  20. tot+=sum[x];
  21. x-=x&(-x);
  22. }
  23. return tot;
  24. }
  25. void solve(int head,int tail,int l,int r){
  26. if(head>tail)return;
  27. if(l==r){
  28. for(int i=head;i<=tail;i++)
  29. if(q[i].tp==)ans[q[i].s]=l;
  30. return;
  31. }
  32. int mid=l+r>>;
  33. for(int i=head;i<=tail;i++){
  34. if(q[i].tp==&&q[i].y<=mid)modify(q[i].x,);
  35. if(q[i].tp==&&q[i].y<=mid)modify(q[i].x,-);
  36. if(q[i].tp==) tmp[i]=query(q[i].y)-query(q[i].x-);
  37. }
  38. for(int i=head;i<=tail;i++){
  39. if(q[i].tp==&&q[i].y<=mid)modify(q[i].x,-);
  40. if(q[i].tp==&&q[i].y<=mid)modify(q[i].x,);
  41. }
  42. int l1=,l2=;
  43. for(int i=head;i<=tail;i++){
  44. if(q[i].tp==){
  45. if(q[i].cur+tmp[i]>=q[i].k) q1[++l1]=q[i];
  46. else q[i].cur+=tmp[i],q2[++l2]=q[i];
  47. }
  48. else {
  49. if(q[i].y<=mid) q1[++l1]=q[i];
  50. else q2[++l2]=q[i];
  51. }
  52. }
  53. for(int i=;i<=l1;i++) q[head+i-]=q1[i];
  54. for(int i=;i<=l2;i++) q[head+l1+i-]=q2[i];
  55. solve(head,head+l1-,l,mid);
  56. solve(head+l1,tail,mid+,r);
  57. }
  58. void work(){
  59. for(int i=;i<=n;i++){
  60. scanf("%d",&a[i]);
  61. q[++num].x=i;q[num].y=a[i];q[num].tp=;q[num].s=;
  62. }
  63. scanf("%d",&m);
  64. for(int i=;i<=m;i++){
  65. int op;scanf("%d",&op);
  66. if(op==){
  67. int x,y;scanf("%d%d",&x,&y);
  68. q[++num].x=x;q[num].y=a[x];q[num].tp=;q[num].s=;
  69. q[++num].x=x;q[num].y=y;q[num].tp=;q[num].s=;
  70. a[x]=y;
  71. }
  72. else {
  73. int x,y,k;scanf("%d%d%d",&x,&y,&k);
  74. q[++num].x=x;q[num].y=y;q[num].k=k;q[num].tp=;q[num].s=++cnt;
  75. }
  76. }
  77. solve(,num,-inf,inf);
  78. for(int i=;i<=cnt;i++)
  79. printf("%d\n",ans[i]);
  80. }
  81. int main(){
  82. while(scanf("%d",&n)!=EOF){
  83. memset(ans,,sizeof(ans));
  84. memset(tmp,,sizeof(tmp));
  85. memset(sum,,sizeof(sum));
  86. memset(q,,sizeof(q));
  87. num=cnt=;
  88. work();
  89. }
  90. return ;
  91. }

Dynamic Rankings(zoj 2112)的更多相关文章

  1. Dynamic Rankings(整体二分)

    Dynamic Rankings(整体二分) 带修区间第k小.\(n,q\le 10^4\). 这次我们旧瓶装新酒,不用带修主席树.我们用整体二分!整体二分是啥东西呢? 二分答案可以解决一次询问的问题 ...

  2. Luogu P2617 Dynamic Rankings(整体二分)

    题目 动态区间第K小模板题. 一个非常可行的办法是BIT套动态开点权值SegTree,但是它跑的实在太慢了. 然后由于这题并没有强制在线,所以我们可以使用整体二分来吊打树套树. 当然如果强制在线的话就 ...

  3. [Luogu2617]Dynamic Rankings(整体二分)

    Luogu 动态区间第K大的整体二分解法 之前学主席树的时候就做了这道题(明明是树套树不是主席树啊),码量挺大而且调了我一个晚上.换成整体二分我半个小时就写完了而且一A. 写起来就是爽. 其实原理很简 ...

  4. luogu P2617 Dynamic Rankings(主席树)

    嘟嘟嘟 一句话题意:带修改区间第\(k\)小. 不修改都会,主席树板子.但是有修改就要比较深入的理解主席树了. 众所周知,主席树中以\(i\)为根的线段树维护的是\([1, i]\)这个前缀的权值,因 ...

  5. acwing1782 Dynamic Rankings (整体二分)

    和整体二分的模板相比,多了修改操作. 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N=1e5+10,INF=1 ...

  6. Dynamic Rankings(树状数组套权值线段树)

    Dynamic Rankings(树状数组套权值线段树) 给定一个含有n个数的序列a[1],a[2],a[3]--a[n],程序必须回答这样的询问:对于给定的i,j,k,在a[i],a[i+1],a[ ...

  7. POJ 1274 The Perfect Stall || POJ 1469 COURSES(zoj 1140)二分图匹配

    两题二分图匹配的题: 1.一个农民有n头牛和m个畜栏,对于每个畜栏,每头牛有不同喜好,有的想去,有的不想,对于给定的喜好表,你需要求出最大可以满足多少头牛的需求. 2.给你学生数和课程数,以及学生上的 ...

  8. ZOJ 2112 Dynamic Rankings(主席树の动态kth)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2112 The Company Dynamic Rankings ...

  9. ZOJ 2112 Dynamic Rankings(动态区间第 k 大+块状链表)

    题目大意 给定一个数列,编号从 1 到 n,现在有 m 个操作,操作分两类: 1. 修改数列中某个位置的数的值为 val 2. 询问 [L, R] 这个区间中第 k 大的是多少 n<=50,00 ...

随机推荐

  1. vijos 1448 校门外的树 (不是05年普及组那题)

    描述 校门外有很多树,有苹果树,香蕉树,有会扔石头的,有可以吃掉补充体力的……如今学校决定在某个时刻在某一段种上一种树,保证任一时刻不会出现两段相同种类的树,现有两个操作:K=1,K=1,读入l.r表 ...

  2. winhex与磁盘格式与 数据恢复

    第一阶段: 熟悉WinHex的使用. n 熟悉磁盘工具的使用. n 利用WinHex查看物理磁盘和逻辑磁盘. n 了解WinHex中相关工具的用法. 以管理员身份运行winhex(以便之后修改) 上方 ...

  3. BOM函数之history对象

    前面的话 history对象保存着用户上网的历史记录,从窗口被打开的那一刻算起.由于安全方面的考虑,开发人员无法得到用户浏览器的URL,但借由用户访问过的页面列表,可以在不知道实际URL的情况下实现后 ...

  4. 使用JAVA抓取网页数据

    一.使用 HttpClient 抓取网页数据 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 ...

  5. 开发工具IDEA环境安装配置

    开发工具IDEA环境安装配置 该工具和eclipse类似,但是使用感受确实比eclipse好,越来越多人开始使用IDEA了. 下载地址如下 : https://www.jetbrains.com/id ...

  6. docker-compose volumes指令路径映射问题

    背景:最近在自学docker容器知识,在跟着<Docker - 从入门到实践>进行 docker-compose 搭建django/postgreSQL 实例.在搭建过程中由于自己操作失误 ...

  7. 一篇关于BEM命名规范

    一直以来自己对命名都是比较混乱的,并没有一个比较好的格式来命名,最近自己碰巧学习到了BEM命名规范,我想谈谈自己的理解以供自己来学习,同时也可以和各位大佬一起学习. BEM是一个很有用的方法可以创建复 ...

  8. 《嵌入式linux应用程序开发标准教程》笔记——6.文件IO编程

    前段时间看APUE,确实比较详细,不过过于详细了,当成工具书倒是比较合适,还是读一读这种培训机构的书籍,进度会比较快,遇到问题时再回去翻翻APUE,这样的效率可能更高一些. <嵌入式linux应 ...

  9. 数据结构( Pyhon 语言描述 ) — —第11章:集和字典

    使用集 集是没有特定顺序的项的一个集合,集中的项中唯一的 集上可以执行的操作 返回集中项的数目 测试集是否为空 向集中添加一项 从集中删除一项 测试给定的项是否在集中 获取两个集的并集 获取两个集的交 ...

  10. 我的Python分析成长之路4

    一.函数 1.什么是函数?:函数是带名字的代码块,调用函数,只要调用函数名就可以.    2.函数的性质:1.减少重复代码 2.使程序变得可扩展 3.使程序变得易维护 3.编程范示: 1.面向对象编程 ...