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

2 5
1 1 2 1
1 1 2 2
2 1 1 2
2 1 1 1
2 1 2 3

Sample Output

1
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. /*
  2. 动态第K大,整体二分的经典题目。
  3. 思想和静态的是差不多的,即二分出答案之后用树状数组判断,但是这个题目树状数组用了两个,就不是很懂了。
  4. */
  5. #include<iostream>
  6. #include<cstdio>
  7. #include<cstring>
  8. #include<algorithm>
  9. #define lon long long
  10. #define N 50010
  11. using namespace std;
  12. lon n,m,c1[N],c2[N],ans[N],has[N];
  13. struct node{
  14. lon l,r,c,tp,id;
  15. };node a[N],q[N];
  16. void add(lon *c,lon i,lon b){
  17. for(;i<=n;i+=i&(-i))
  18. c[i]+=b;
  19. }
  20. lon sum(lon *c,lon i){
  21. lon r=;
  22. for(;i;i-=i&(-i))
  23. r+=c[i];
  24. return r;
  25. }
  26. void modify(lon l,lon r,lon c){
  27. add(c1,l,c);add(c1,r+,-c);
  28. add(c2,l,-c*(l-));add(c2,r+,c*r);
  29. }
  30. lon pre(lon i){
  31. if(!i)return ;
  32. return sum(c1,i)*i+sum(c2,i);
  33. }
  34. lon query(lon l,lon r){
  35. return pre(r)-pre(l-);
  36. }
  37. void solve(lon head,lon tail,lon l,lon r){
  38. if(head>tail) return;
  39. if(l==r){
  40. for(lon i=head;i<=tail;i++)
  41. if(a[i].tp==) ans[a[i].id]=l;
  42. return;
  43. }
  44. lon mid=l+r>>;
  45. lon l1=head,l2=tail;
  46. for(lon i=head;i<=tail;i++){
  47. if(a[i].tp==){
  48. if(a[i].c<=mid) q[l1++]=a[i];
  49. else q[l2--]=a[i],modify(a[i].l,a[i].r,);
  50. }
  51. else {
  52. lon cnt=query(a[i].l,a[i].r);
  53. if(cnt<a[i].c){
  54. a[i].c-=cnt;
  55. q[l1++]=a[i];
  56. }
  57. else q[l2--]=a[i];
  58. }
  59. }
  60. reverse(q+l2+,q+tail+);
  61. for(lon i=head;i<=tail;i++){
  62. a[i]=q[i];
  63. if(a[i].tp==&&a[i].c>mid)
  64. modify(a[i].l,a[i].r,-);
  65. }
  66. solve(head,l1-,l,mid);
  67. solve(l1,tail,mid+,r);
  68. }
  69. int main(){
  70. scanf("%lld%lld",&n,&m);
  71. for(lon i=;i<=m;i++){
  72. scanf("%lld%lld%lld%lld",&a[i].tp,&a[i].l,&a[i].r,&a[i].c);
  73. a[i].id=i;
  74. if(a[i].tp==) has[i]=;
  75. }
  76. solve(,m,,n);
  77. for(lon i=;i<=m;i++)
  78. if(has[i])printf("%lld\n",ans[i]);
  79. return ;
  80. }

K大数查询(bzoj 3110)的更多相关文章

  1. K大数查询 BZOJ 3110

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

  2. 【ZJOI2013】k大数查询 BZOJ 3110

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

  3. BZOJ 3110 K大数查询 | 整体二分

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

  4. [BZOJ 3110] [luogu 3332] [ZJOI 2013]k大数查询(权值线段树套线段树)

    [BZOJ 3110] [luogu 3332] [ZJOI 2013]k大数查询(权值线段树套线段树) 题面 原题面有点歧义,不过从样例可以看出来真正的意思 有n个位置,每个位置可以看做一个集合. ...

  5. BZOJ 3110: [Zjoi2013]K大数查询 [树套树]

    3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 6050  Solved: 2007[Submit][Sta ...

  6. 树套树专题——bzoj 3110: [Zjoi2013] K大数查询 &amp; 3236 [Ahoi2013] 作业 题解

    [原题1] 3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec  Memory Limit: 512 MB Submit: 978  Solved: 476 Descri ...

  7. bzoj 3110: [Zjoi2013]K大数查询 树状数组套线段树

    3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 1384  Solved: 629[Submit][Stat ...

  8. BZOJ 3110: [Zjoi2013]K大数查询( 树状数组套主席树 )

    BIT+(可持久化)权值线段树, 用到了BIT的差分技巧. 时间复杂度O(Nlog^2(N)) ---------------------------------------------------- ...

  9. BZOJ 3110([Zjoi2013]K大数查询-区间第k大[段修改,在线]-树状数组套函数式线段树)

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

  10. BZOJ 3110 [Zjoi2013]K大数查询(整体二分)

    3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 11654  Solved: 3505[Submit][St ...

随机推荐

  1. 洛谷 P1732 活蹦乱跳的香穗子

    题目描述 香穗子在田野上调蘑菇!她跳啊跳,发现自己很无聊,于是她想了一个有趣的事情,每个格子最多只能经过1次,且每个格子都有其价值 跳的规则是这样的,香穗子可以向上下左右四个方向跳到相邻的格子,并且她 ...

  2. tomcat配置 —— 各个目录的作用

    tomcat各目录(文件)作用 tomcat-7.0.50解压版,主目录一览: 我们可以看到主目录下有bin,conf,lib,logs,temp,webapps,work 7个文件夹,下面对他们分别 ...

  3. (转)SpringMVC学习(五)——SpringMVC的参数绑定

    http://blog.csdn.net/yerenyuan_pku/article/details/72511611 SpringMVC中的参数绑定还是蛮重要的,所以单独开一篇文章来讲解.本文所有案 ...

  4. Android(java)学习笔记143:Android中View动画之 XML实现 和 代码实现

    1.Animation 动画类型 Android的animation由四种类型组成: XML中: alph 渐变透明度动画效果 scale 渐变尺寸伸缩动画效果 translate 画面转换位置移动动 ...

  5. Jarvis OJ-level3

    使用ret2libc攻击方法绕过数据执行保护 from pwn import* conn = remote("pwn2.jarvisoj.com",9879) elf = ELF( ...

  6. PAT (Basic Level) Practise (中文)-1025. 反转链表 (25)

    PAT (Basic Level) Practise (中文)-1025. 反转链表 (25)   http://www.patest.cn/contests/pat-b-practise/1025 ...

  7. luogu愚人节比赛划水记

    先放链接:愚人节比赛 说好的 不毒瘤 呢?题目都太神奇了吧! 管理员的脑洞orz T1 这个可以说是蒙数据蒙出来的,直接输出"0",AC T2 本机房dalao成功发现" ...

  8. Eclipse调试:项目在Debug模式下,无法启动的问题

    问题:Eclipse中调试Java项目时,使用正常模式:Run 项目名,可以正常启动.当想打断点调试时,点击Debug按钮后,项目显示 Source not found,或者弹出窗口显示服务器在45秒 ...

  9. HTML5基础知识习题 一

    1. HTML5 之前的 HTML 版本是什么? 答: HTML 4.01 2. HTML5 的正确 doctype 是? 答: <!DOCTYPE html> 3. 在 HTML5 中, ...

  10. ios 检查内存泄露

    简介 在IPhone程式开发中,记忆体泄漏(内存泄漏)是个很容易发生的情况,因为IPhone必须自行作记忆体管理.现在的开发者,大多习惯用的.NET或Java的等有垃圾回收机制的开发语言来作开发,因此 ...