题目链接

对于这一区间的操作,我们可以想到差分+前缀和(感觉也没什么别的了。。)。

同时对于本题我们能想到主席树,而主席树正是利用前一个节点建树的。

所以离散化、按时间排序,把操作拆成单点加和减即可。

另外优先级会有重,权值线段树是去重后的,所以要记录sz[](即有sz[]个该值 是sum[])并根据这个算出k个。

但是对于同一根节点每次修改必须新建logn个节点?是的,因为每改一个节点都不能和之前的路径共用,需要新建。

注意每个询问拆成了两个,空间是2nlogn!

longlong!

  1. //82080kb 3672ms
  2. #include <cstdio>
  3. #include <cctype>
  4. #include <algorithm>
  5. #define gc() getchar()
  6. typedef long long LL;
  7. const int N=1e5+5,S=N*40;//size!
  8. int n,m,cnt,ref[N],root[N];
  9. struct Operation
  10. {
  11. int p,val,tag;
  12. Operation() {}
  13. Operation(int _p,int _v,int _t):p(_p),val(_v),tag(_t) {}
  14. bool operator <(const Operation &a)const{
  15. return p<a.p;
  16. }
  17. }q[N<<1];
  18. namespace T
  19. {
  20. #define lson son[rt][0]
  21. #define rson son[rt][1]
  22. int tot,sz[S],son[S][2]; LL sum[S];
  23. inline void Update(int rt){
  24. sum[rt]=sum[lson]+sum[rson];
  25. }
  26. void Insert(int rt,int &y,int l,int r,int p,int v)
  27. {
  28. sz[y=++tot]=sz[rt]+v, sum[y]=sum[rt];
  29. if(l==r) sum[y]+=ref[p]*v;//别直接用p!
  30. else{
  31. int m=l+r>>1;
  32. if(p<=m) son[y][1]=rson, Insert(lson,son[y][0],l,m,p,v);
  33. else son[y][0]=lson, Insert(rson,son[y][1],m+1,r,p,v);
  34. Update(y);
  35. }
  36. }
  37. LL Query(int rt,int l,int r,int k)
  38. {
  39. if(l==r) return sz[rt]?sum[rt]/sz[rt]*k:0;
  40. if(sz[lson]==k) return sum[lson];
  41. else if(sz[lson]<k) return sum[lson]+Query(rson,(l+r>>1)+1,r,k-sz[lson]);
  42. else return Query(lson,l,l+r>>1,k);
  43. }
  44. }
  45. inline int read()
  46. {
  47. int now=0;register char c=gc();
  48. for(;!isdigit(c);c=gc());
  49. for(;isdigit(c);now=now*10+c-'0',c=gc());
  50. return now;
  51. }
  52. int Find(int x)
  53. {
  54. int l=1,r=cnt,mid;
  55. while(l<r)
  56. if(ref[mid=l+r>>1]<x) l=mid+1;
  57. else r=mid;
  58. return l;
  59. }
  60. int main()
  61. {
  62. n=read(),m=read();
  63. int tot=n<<1;
  64. for(int s,e,i=0; i<n; ++i)
  65. s=read(),e=read(),ref[i+1]=read(),q[i<<1]=Operation(s,ref[i+1],1),q[i<<1|1]=Operation(e+1,ref[i+1],-1);
  66. std::sort(ref+1,ref+1+n), cnt=1;
  67. for(int i=2; i<=n; ++i)
  68. if(ref[i]!=ref[i-1]) ref[++cnt]=ref[i];
  69. std::sort(q,q+tot), q[tot].p=m+1;
  70. for(int i=0; i<tot; ++i) q[i].val=Find(q[i].val);
  71. for(int i=1,now=0; i<=m; root[i+1]=root[i],++i)//m还是时间范围!
  72. while(q[now].p<=i/*&& now<tot*/)
  73. T::Insert(root[i]/*(赋值后)在root[i]的基础上建*/,root[i],1,cnt,q[now].val/*不在这写Find(q[].val)好像更快?*/,q[now].tag), ++now;
  74. int x,a,b,c; LL res=1;
  75. while(m--)
  76. x=read(),a=read(),b=read(),c=read(),printf("%lld\n",res=T::Query(root[x],1,cnt,1+(res*a%c+b)%c));
  77. return 0;
  78. }

BZOJ.3932.[CQOI2015]任务查询系统(主席树 差分)的更多相关文章

  1. bzoj 3932: [CQOI2015]任务查询系统 -- 主席树 / 暴力

    3932: [CQOI2015]任务查询系统 Time Limit: 20 Sec  Memory Limit: 512 MB Description 最近实验室正在为其管理的超级计算机编制一套任务管 ...

  2. BZOJ 3932: [CQOI2015]任务查询系统 (主席树板题)

    就是裸的主席树,差分之后排序插入主席树就行了. 注意主席树查询的时候叶子节点要特判,因为本身是有size的 还有要开longlong CODE #include <cctype> #inc ...

  3. BZOJ 3932: [CQOI2015]任务查询系统 [主席树]

    传送门 题意: 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第Ei秒后结束(第Si秒和Ei秒任务也在运行),其优先级为Pi 调度系统会经常向查询系统询问,第Xi ...

  4. BZOJ 3932: [CQOI2015]任务查询系统 | 主席树练习题

    题目: 洛谷也能评测 题解: De了好长时间BUG发现是自己sort前面有一行for没删,气死. 题目询问第x秒时候前k小的P值之和. 朴素想法: 我们可以把P值离散化,然后对于每个时刻建一棵定义域是 ...

  5. 2018.06.30 BZOJ 3932: [CQOI2015]任务查询系统(主席树)

    3932: [CQOI2015]任务查询系统 Time Limit: 20 Sec Memory Limit: 512 MB Description 最近实验室正在为其管理的超级计算机编制一套任务管理 ...

  6. BZOJ3932: [CQOI2015]任务查询系统 主席树

    3932: [CQOI2015]任务查询系统 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 4869  Solved: 1652[Submit][St ...

  7. [CQOI2015]任务查询系统 主席树

    [CQOI2015]任务查询系统 LG传送门 以前还没见过主席树的这种写法. 考虑使用差分的思想处理每一个任务,然后所有的东西就都能顺理成章地用主席树维护了,查询的时候和平时的主席树有一点不同,详见代 ...

  8. 【BZOJ3932】[CQOI2015]任务查询系统 主席树

    [BZOJ3932][CQOI2015]任务查询系统 Description 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si, ...

  9. bzoj 3932 [CQOI2015]任务查询系统(主席树)

    Description 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分. 超级计算机中的任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si ...

随机推荐

  1. Ubantu里面的Sublime Text3不支持中文的解决办法

    参考的大佬链接:https://github.com/lyfeyaj/sublime-text-imfix 更新然后将系统升级到最新版本,在linux终端输入 sudo apt-get update ...

  2. bzoj千题计划295:bzoj3140: [Hnoi2013]消毒

    http://www.lydsy.com/JudgeOnline/problem.php?id=3140 如果只有两维,那就是二分图最小点覆盖 现在是三维,但是a*b*c<=5000,说明最小的 ...

  3. python学习笔记7-网络编程

    import urllib.request import json,requests #urlib模块,不常用 url = 'http://api.nnzhp.cn/api/user/stu_info ...

  4. WebSlides - 轻松制作漂亮的 HTML 幻灯片(演讲稿)

    WebSlides 是一个开源的 HTML 幻灯片项目,能够帮助熟悉前端语言的开发者快速制作出效果精美的幻灯片.页面中的每个 <section> 都是一个独立的幻灯片,只需要很少的 CSS ...

  5. UVALive 6467 Strahler Order

    > 题目链接 题意:给定一个有向图,顶点代表水池,入度为零的定点代表水源,等级是1,他们延河道(有向边)冲撞,对于普通的水池来说,题目给定判断它等级的两个准则,问出度为零的那个点的等级是多少. ...

  6. [BZOJ 1879][SDOI 2009]Bill的挑战 题解(状压DP)

    [BZOJ 1879][SDOI 2009]Bill的挑战 Description Solution 1.考虑状压的方式. 方案1:如果我们把每一个字符串压起来,用一个布尔数组表示与每一个字母的匹配关 ...

  7. Hibernate二级缓存(未完待续)

    1.Hibernate的cache介绍: Hibernate实现了良好的Cache机制,可以借助Hibernate内部的Cache迅速提高系统的数据读取性能.Hibernate中的Cache可分为两层 ...

  8. MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇

    Java面试通关手册(Java学习指南,欢迎Star,会一直完善下去,欢迎建议和指导):https://github.com/Snailclimb/Java_Guide 一 MyISAM 1.1 My ...

  9. linux系统上次启动时间查看

    uptime [root@node2 ~]# uptime 18:58:47 up 12 min, 2 users, load average: 0.01, 0.07, 0.07 [root@node ...

  10. malloc 函数详解

    很多学过C的人对malloc都不是很了解,知道使用malloc要加头文件,知道malloc是分配一块连续的内存,知道和free函数是一起用的.但是但是: 一部分人还是将:malloc当作系统所提供的或 ...