题目链接 \(Click\) \(Here\)

差分主席树,就是把主席树做成一个差分前缀和的形式,还是很容易想到的。

写主席树的时候几个注意点:

  • 查询可能开始于所有任务之前,二分任务点要把左边界设置为\(0\)
  • 记得开\(longlong\)
  • 主席树通用细节:查询结束后的边界可能有残余答案未统计。即一个权值里的数,选了太多,不选太少,二分后要手动选上漏掉的部分。
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int N = 200010;
  4. const int INF = 1e7;
  5. #define int long long
  6. int m, n, pre = 1;
  7. struct Task {
  8. int t, w, p;
  9. bool operator < (Task rhs) const {
  10. return t < rhs.t;
  11. }
  12. }task[N << 1];
  13. int tot = 1, rt[N << 1];
  14. #define mid ((l + r) >> 1)
  15. struct Segment_Node {
  16. int sz, ls, rs, sum;
  17. }t[N << 6];
  18. int modify (int _rt, int l, int r, int w, int del) {
  19. int p = ++tot;
  20. t[p].sz = t[_rt].sz + del;
  21. t[p].sum = t[_rt].sum + del * w;
  22. if (l != r) {
  23. if (w <= mid) {
  24. t[p].ls = modify (t[_rt].ls, l, mid, w, del), t[p].rs = t[_rt].rs;
  25. } else {
  26. t[p].rs = modify (t[_rt].rs, mid + 1, r, w, del), t[p].ls = t[_rt].ls;
  27. }
  28. } else {
  29. t[p].ls = t[p].rs = 0;
  30. }
  31. return p;
  32. }
  33. int query (int rt, int l, int r, int k) {
  34. int sum = 0; k = min (k, t[rt].sz);
  35. while (l < r) {
  36. int lch = t[t[rt].ls].sz;
  37. int lsum = t[t[rt].ls].sum;
  38. if (k >= lch) {
  39. k -= lch;
  40. sum += lsum;
  41. l = mid + 1;
  42. rt = t[rt].rs;
  43. } else {
  44. r = mid;
  45. rt = t[rt].ls;
  46. }
  47. }
  48. return sum + k * r;
  49. }
  50. #undef mid
  51. signed main () {
  52. // freopen ("data.in", "r", stdin);
  53. // freopen ("data.out", "w", stdout);
  54. t[0] = (Segment_Node) {0, 0, 0, 0};
  55. cin >> m >> n;
  56. for (int i = 1; i <= m; ++i) {
  57. static int S, E, P;
  58. cin >> S >> E >> P;
  59. task[i * 2 - 1] = (Task) {S, +1, P};
  60. task[i * 2] = (Task) {E + 1, -1, P};
  61. }
  62. sort (task + 1, task + 1 + m * 2);
  63. for (int i = 1; i <= m * 2; ++i) {
  64. rt[i] = modify (rt[i - 1], 1, 1e7, task[i].p, task[i].w);
  65. // printf ("task[%d] = {%d, %d, %d}\n", i, task[i].t, task[i].w, task[i].p);
  66. }
  67. for (int i = 1; i <= n; ++i) {
  68. static int X, K, A, B, C;
  69. cin >> X >> A >> B >> C;
  70. K = 1 + (A * pre + B) % C;
  71. int l = 0, r = m * 2;
  72. while (l < r) {
  73. int mid = (l + r + 1) >> 1;
  74. if (task[mid].t <= X) {
  75. l = mid;
  76. } else {
  77. r = mid - 1;
  78. }
  79. }
  80. // printf ("l = %d, k = %d\n", l, K);
  81. cout << (pre = query (rt[l], 1, 1e7, K)) << endl;
  82. }
  83. }

Luogu P3168 [CQOI2015]任务查询系统的更多相关文章

  1. 「Luogu P3168 [CQOI2015]任务查询系统」

    介绍本题的两种做法: 方法1 前置芝士 线段树:一个很重要的数据结构. 树状数组:一个很重要的数据结构. 具体实现 区间修改,单点查询很容易就会想到树状数组了,至于查询前k个数的和又可以丢给权值线段树 ...

  2. P3168 [CQOI2015]任务查询系统

    题目地址:P3168 [CQOI2015]任务查询系统 主席树的模板题 更模板的在这儿:P3834 [模板]可持久化线段树 1(主席树) 形象的说,P3834是"单点修改,区间查询" ...

  3. bzoj3932 / P3168 [CQOI2015]任务查询系统(主席树+差分)

    P3168 [CQOI2015]任务查询系统 看到第k小,就是主席树辣 对于每一段任务(a,b,k),在版本a的主席树+k,版本b+1的主席树-k 同一时间可能有多次修改,所以开个vector存操作, ...

  4. 洛谷 P3168 [CQOI2015]任务查询系统 解题报告

    P3168 [CQOI2015]任务查询系统 题目描述 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分. 超级计算机中的任务用三元组\((S_i,E_i,P_i) ...

  5. 洛谷P3168 [CQOI2015]任务查询系统 [主席树,差分]

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

  6. ●洛谷P3168 [CQOI2015]任务查询系统

    题链: https://www.luogu.org/problemnew/show/P3168题解: 主席树 强制在线? 那就直接对每一个前缀时间建一个线段树(可持久化线段树),线段树维护优先度权值. ...

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

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

  8. 洛谷P3168 [CQOI2015]任务查询系统

    #include<cstdio> #include<cstdlib> #include<algorithm> #include<cstring> #in ...

  9. p3168 [CQOI2015]任务查询系统(差分+主席树)

    恕我才学浅薄,一开始想到的是树状数组+线段树,然后看了题解才第一次见到了差分这种神奇的科技 仔细想想,主席树的本质不就是前缀和嘛,加上一个差分也是可以的,没想到真是罪过罪过 对时间维护一个差分 在Si ...

随机推荐

  1. LDOOP设置关联后超出新起一页LinkNewPage

    关联打印的时候,top,left关联位置是相对于被关联打印项的偏移值,具体可查看本博客相关介绍博文:LODOP打印控件关联输出各内容 正常情况下,超文本超过打印项高度,或纸张高度会自动分页,如果超文本 ...

  2. Lodop获取客户端主网卡ip地址是0.0.0.0

    LODOP技术手册的GET_SYSTEM_INFO篇,LODOP可以用语句获取到客户端很多信息,NetworkAdapter.1.IPAddress是主网卡IP地址,通常情况下是没问题的,不过如果当前 ...

  3. Sql Server设置主键和外键

    设置主键 https://jingyan.baidu.com/article/9158e0003349a7a2541228fd.html 设置外键 https://jingyan.baidu.com/ ...

  4. Maven使用(一)—— Maven的安装与全局配置

    一.Maven安装 Maven的安装步骤: 1.Maven官网(http://maven.apache.org/)下载压缩包,解压缩,当前最新版本是apache-maven-3.5.3-bin.zip ...

  5. 模板-layui

    table数据格式化 {field:'IsTop',title:'是否置顶',width:150,templet:'#isTop'} <!-- 模板 --> <script type ...

  6. P1216 数字三角形

    题目描述 观察下面的数字金字塔. 写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大.每一步可以走到左下方的点也可以到达右下方的点. 7 3 8 8 1 0 2 7 4 4 4 5 ...

  7. 云服务器ECS

    云服务器Elastic Compute Service(ECS)是阿里云提供的一种基础云计算服务.使用云服务器ECS就像使用水.电.煤气等资源一样便捷.高效.您无需提前采购硬件设备,而是根据业务需要, ...

  8. Linux 通过Shell 查找问题进程 [转]

    背景介绍: 最近公司服务器不太稳定,总是在凌晨某个时段突发高负载情况,因为客观环境比较复杂,所以很难猜测出到底是哪个进程出现了问题,加之故障发生时,通常我在睡觉,等我被报警短信吵醒,通过公司 VPN ...

  9. 【UOJ#450】【集训队作业2018】复读机(生成函数,单位根反演)

    [UOJ#450][集训队作业2018]复读机(生成函数,单位根反演) 题面 UOJ 题解 似乎是\(\mbox{Anson}\)爷的题. \(d=1\)的时候,随便怎么都行,答案就是\(k^n\). ...

  10. urllib的实现---请求响应and请求头处理

    在python3中 urllib库和urilib2库合并成了urllib库..其中urllib2.urlopen()变成了urllib.request.urlopen()urllib2.Request ...