用树套树就很麻烦,用整体二分就成了裸题。。。。

错误:

1.尝试线段树套平衡树,码农,而且n*log^3(n)慢慢卡反正我觉得卡不过去

2.线段树pushdown写错。。。加法tag对于区间和的更新应该要乘上区间长度的

  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<cstring>
  4. using namespace std;
  5. typedef long long LL;
  6. struct Q
  7. {
  8. LL type,a,b,c,num;
  9. }q[],qt1[],qt2[];
  10. LL ans[],qnum;
  11. LL n,m;
  12. namespace SegT
  13. {
  14. #define mid (l+((r-l)>>1))
  15. #define lc (num<<1)
  16. #define rc (num<<1|1)
  17. LL dat[],addv[];
  18. LL L,R,x;
  19. void pd(LL l,LL r,LL num)
  20. {
  21. if(addv[num])
  22. {
  23. dat[lc]+=(mid-l+)*addv[num];addv[lc]+=addv[num];
  24. dat[rc]+=(r-mid)*addv[num];addv[rc]+=addv[num];
  25. addv[num]=;
  26. }
  27. }
  28. void _addx(LL l,LL r,LL num)
  29. {
  30. if(L<=l&&r<=R) {dat[num]+=(r-l+)*x;addv[num]+=x;return;}
  31. pd(l,r,num);
  32. if(L<=mid) _addx(l,mid,lc);
  33. if(mid<R) _addx(mid+,r,rc);
  34. dat[num]=dat[lc]+dat[rc];
  35. }
  36. LL _query(LL l,LL r,LL num)
  37. {
  38. if(L<=l&&r<=R) return dat[num];
  39. pd(l,r,num);LL ans=;
  40. if(L<=mid) ans+=_query(l,mid,lc);
  41. if(mid<R) ans+=_query(mid+,r,rc);
  42. return ans;
  43. }
  44. void addx(LL l,LL r,LL d)
  45. {
  46. L=l;R=r;x=d;_addx(,n,);
  47. }
  48. LL query(LL l,LL r)
  49. {
  50. L=l;R=r;return _query(,n,);
  51. }
  52. #undef mid
  53. #undef lc
  54. #undef rc
  55. }
  56. void solve(LL lp,LL rp,LL l,LL r)
  57. {
  58. if(lp>rp) return;
  59. LL i;
  60. if(l==r)
  61. {
  62. for(i=lp;i<=rp;i++)
  63. if(q[i].type==)
  64. ans[q[i].num]=l;
  65. return;
  66. }
  67. LL mid=l+((r-l)>>),tlen1=,tlen2=,t;
  68. for(i=lp;i<=rp;i++)
  69. {
  70. if(q[i].type==)
  71. {
  72. if(q[i].c>mid)
  73. {
  74. SegT::addx(q[i].a,q[i].b,);
  75. qt1[++tlen1]=q[i];
  76. }
  77. else
  78. qt2[++tlen2]=q[i];
  79. }
  80. else
  81. {
  82. t=SegT::query(q[i].a,q[i].b);
  83. if(t>=q[i].c)
  84. qt1[++tlen1]=q[i];
  85. else
  86. qt2[++tlen2]=q[i],qt2[tlen2].c-=t;
  87. }
  88. }
  89. for(i=lp;i<=rp;i++)
  90. if(q[i].type==&&q[i].c>mid)
  91. SegT::addx(q[i].a,q[i].b,-);
  92. memcpy(q+lp,qt1+,sizeof(Q)*tlen1);
  93. memcpy(q+lp+tlen1,qt2+,sizeof(Q)*tlen2);
  94. solve(lp,lp+tlen1-,mid+,r);
  95. solve(lp+tlen1,rp,l,mid);
  96. }
  97. int main()
  98. {
  99. LL i;
  100. scanf("%lld%lld",&n,&m);
  101. for(i=;i<=m;i++)
  102. {
  103. scanf("%lld%lld%lld%lld",&q[i].type,&q[i].a,&q[i].b,&q[i].c);
  104. if(q[i].type==) q[i].num=++qnum;
  105. }
  106. solve(,m,-,);
  107. for(i=;i<=qnum;i++) printf("%lld\n",ans[i]);
  108. return ;
  109. }

洛谷 P3332 [ZJOI2013]K大数查询 || bzoj3110的更多相关文章

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

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

  2. 洛谷 P3332 [ZJOI2013]K大数查询 (整体二分理解)

    链接: P3332 题意: 维护 \(n(1\leq n\leq 5\times10^4)\) 个可重整数集,编号从 \(1\) 到 \(n\).有 \(m(1\leq m\leq5\times10^ ...

  3. [洛谷P3332][ZJOI2013]K大数查询

    题目大意:有$n$个位置,$m$个操作.操作有两种: $1\;l\;r\;x:$在区间$[l,r]$每个位置加上一个数$x$ $2\;l\;r\;k:$询问$[l,r]$中第$k$大的数是多少. 题解 ...

  4. 洛谷P3332 [ZJOI2013]K大数查询 权值线段树套区间线段树_标记永久化

    Code: #include <cstdio> #include <algorithm> #include <string> #include <cstrin ...

  5. P3332 [ZJOI2013]K大数查询(线段树套线段树+标记永久化)

    P3332 [ZJOI2013]K大数查询 权值线段树套区间线段树 把插入的值离散化一下开个线段树 蓝后每个节点开个线段树,维护一下每个数出现的区间和次数 为了防止MLE动态开点就好辣 重点是标记永久 ...

  6. P3332 [ZJOI2013]K大数查询

    传送门 注意操作 $1$ 是在区间的每个位置加入一个数,不是加上一个值 相当于每个位置维护的是一个集合 显然树套树 一开始想的是区间线段树套权值线段树 发现这样询问区间第 $K$ 大时就要先二分答案再 ...

  7. P3332 [ZJOI2013]K大数查询 整体二分

    终于入门整体二分了,勉勉强强算是搞懂了一个题目吧. 整体二分很多时候可以比较好的离线处理区间\(K\)大值的相关问题.考虑算法流程: 操作队列\(arr\),其中有询问和修改两类操作. 每次在答案的可 ...

  8. 【BZOJ3110】【LG3332】[ZJOI2013]K大数查询

    [BZOJ3110][LG3332][ZJOI2013]K大数查询 题面 洛谷 BZOJ 题解 和普通的整体分治差不多 用线段树维护一下每个查询区间内大于每次二分的值\(mid\)的值即可 然后再按套 ...

  9. 【BZOJ3110】[Zjoi2013]K大数查询 树套树

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

随机推荐

  1. JavaScript Prototype in Plain Language

    非常好的文章: http://javascriptissexy.com/javascript-prototype-in-plain-detailed-language/ jan. 25 2013 14 ...

  2. CSDN-markdown基本的语法说明

    文件夹 概述 简介Markdown CSDN Markdown的功能支持 标题 Setext形式 atx形式 区块引用 分隔线 强调 列表 无序列表 有序列表 注意事项 链接 自己主动链接 普通文本链 ...

  3. C和Fortran互相传递动态数组

    C和Fortran的相互调用传递数值的方法有很多,但是F03标准的出笼,使用ISO_C_BINDING进行C和Fortran的互相调用有着更显著的优势: 1.与编译器和平台无关: 2.Fortran中 ...

  4. mysql字段去重方式

    一直找不出某个字段去重的前提下,还能够显示其它字段的数据 以下是解决方法: SELECT *, COUNT(DISTINCT( province)) FROM area_info WHERE type ...

  5. TCP协议,UDP协议

    帅爆太阳的男人 1,TCP协议 回环地址:127.0.0.1(所有电脑都这一个默认回环地址)每个计算机都有这么一个本机地址只能被本机识别,不会被其他机器识别(因为你用这个地址传内容他就传不出去) TC ...

  6. jQuery的小例子

    1.在html中插入子页面 <script type="text/javascript"> $(document).ready(function() { $(" ...

  7. 深入研究java.lang.Object类

    前言:Java的类库日益庞大.所包括的类和接口也不计其数.但当中有一些非常重要的类和接口,是Java类库中的核心部分.常见的有String.Object.Class.Collection.ClassL ...

  8. Android连接wifi,调用系统API【转】

    本文转载自:http://blog.csdn.net/aaa1050070637/article/details/54136472 直接上代码,简单粗暴,一看就懂 import android.con ...

  9. 一场由过滤器Filter引发的血案

    一场由过滤器Filter引发的血案 事件起因 本来应该是下图的登录界面 变成了这样 What's the fuck????? 抓狂 原因 解决方法: 在过滤器中给资源文件开个绿色通道

  10. 专用于ASP.Net Web应用程序的日期控件

     原文引入:http://blog.csdn.net/nileel/article/details/1566051 专用于ASP.Net Web应用程序的日期控件 分类: ASP.NET/C#2007 ...