题意:有n个任务,第i个的存在时间是li~ri,有个权值。求t时刻第k大的权值。

这毒瘤...本来是前缀和 -> 主席树,我是树套树...然后光荣TLE。

其实很裸。一开始我写的是每个位置维护一个权值线段树。因为要片改点查,就用差分 + 树状数组搞定了。然后超时...

仔细思考,发现不带修可以直接用主席树。

把差分数组插入进去就行了,查询就是前缀和。这么一看好像主席树就是同时对多个数组做前缀和,每个数组就是线段树的一个位置。

我没用标记永久化,标记下传的时候直接新建的节点。

 #include <cstdio>
#include <algorithm>
#include <vector> typedef long long LL;
const int N = , lm = 1e7, M = ; int n, m, tot, rt[N];
int sum[M], ls[M], rs[M];
LL Val[M];
std::vector<int> d[N]; void insert(int x, int &y, int p, int v, int l, int r) {
if(!y || x == y) {
y = ++tot;
sum[y] = sum[x];
Val[y] = Val[x];
}
if(l == r) {
sum[y] += v;
Val[y] += v * r;
return;
}
if(!ls[y]) {
ls[y] = ls[x];
}
if(!rs[y]) {
rs[y] = rs[x];
}
int mid = (l + r) >> ;
if(p <= mid) {
insert(ls[x], ls[y], p, v, l, mid);
}
else {
insert(rs[x], rs[y], p, v, mid + , r);
}
sum[y] = sum[ls[y]] + sum[rs[y]];
Val[y] = Val[ls[y]] + Val[rs[y]];
return;
} LL ask(int k, int l, int r, int o) {
if(!o) {
return ;
}
if(l == r) {
return 1ll * std::min(k, sum[o]) * r;
}
int mid = (l + r) >> ;
if(k <= sum[ls[o]]) {
return ask(k, l, mid, ls[o]);
}
else {
return Val[ls[o]] + ask(k - sum[ls[o]], mid + , r, rs[o]);
}
} int main() {
scanf("%d%d", &n, &m);
for(int i = , x, y, z; i <= n; i++) {
scanf("%d%d%d", &x, &y, &z);
d[x].push_back(z);
d[y + ].push_back(-z);
} // prework
for(int i = ; i <= m; i++) {
if(!d[i].size()) {
rt[i] = rt[i - ];
continue;
}
for(int j = ; j < d[i].size(); j++) {
// d[i][j]
if(d[i][j] > ) {
insert(rt[i - ], rt[i], d[i][j], , , lm);
}
else {
insert(rt[i - ], rt[i], -d[i][j], -, , lm);
}
}
} LL lastans = ;
for(int i = , t, y, z, w; i <= m; i++) {
scanf("%d%d%d%d", &t, &y, &z, &w);
lastans %= w;
y %= w;
int k = (lastans * y + z) % w + ;
lastans = ask(k, , lm, rt[t]);
printf("%lld\n", lastans);
} return ;
}

AC代码

洛谷P3168 任务查询系统的更多相关文章

  1. 洛谷 P5020 货币系统

    题目描述 在网友的国度中共有$ n $种不同面额的货币,第 i种货币的面额为 \(a[i]\),你可以假设每一种货币都有无穷多张.为了方便,我们把货币种数为\(n\).面额数组为 \(a[1..n]\ ...

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

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

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

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

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

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

  5. AC日记——任务查询系统 洛谷 P3168

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

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

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

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

    题目链接 被自己的sb错误调到自闭.. 主席树的进阶应用. 把\(P_i\)离散化一下,得到每个\(P_i\)的排名,然后建一棵维护\(m\)个位置的主席树,每个结点记录区间总和和正在进行的任务数. ...

  8. 洛谷P1474 货币系统 Money Systems

    P1474 货币系统 Money Systems 250通过 553提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交  讨论  题解 最新讨论 暂时没有讨论 题目描述 母牛们不但创 ...

  9. 洛谷 P1474 货币系统 Money Systems(经典)【完全背包】+【恰好装满的最大方案数量】

    题目链接:https://www.luogu.org/problemnew/show/P1474 题目描述 母牛们不但创建了它们自己的政府而且选择了建立了自己的货币系统.由于它们特殊的思考方式,它们对 ...

随机推荐

  1. clone内容包含select2

    如果克隆的内容包含select2,克隆之后要先删除select之后自动生成的span,再对select2进行初始化,生成新的元素.

  2. delphi 中出现dataset not in edit or insert mode的问题

    self.ADOQuery2.Edit;self.ADOQuery2.First;while not self.ADOQuery2.Eof dobeginself.ADOQuery2.FieldByN ...

  3. LODOP字体不识别 英文字母连起来 引号不正常

    打印超文本的时候,有时候会发现html中设置的css样式显示不正常,字体根本不是设置的字体,这种情况有可能是:1.该操作系统没有安装自己指定的那种字体,那么没有安装自然就不能显示设置的字体.2.该操作 ...

  4. How to remove unwant Internet Explorer Context Menu

    HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt

  5. Vue混合mixins

    前面的话 本文将详细介绍Vue混合mixins 概述 混合 (mixins) 是一种分发 Vue 组件中可复用功能的非常灵活的方式.混合对象可以包含任意组件选项.以组件使用混合对象时,所有混合对象的选 ...

  6. Vue数组更新及过滤排序

    前面的话 Vue为了增加列表渲染的功能,增加了一组观察数组的方法,而且可以显示一个数组的过滤或排序的副本.本文将详细介绍Vue数组更新及过滤排序 变异方法 Vue 包含一组观察数组的变异方法,它们将会 ...

  7. pip 指定版本

    要用 pip 安装特定版本的 Python 包,只需通过 == 操作符 指定,例如: pip install -v pycrypto==2.3 将安装 pycrypto 2.3 版本.

  8. 包装类接受string 会自动将数字类型string转换成对应得包装类型

  9. 51nod 1636

    1636 教育改革 我看过题解了还下了数据,表示很惭愧不想说什么,但还是说两句吧 sol: 因为差值很小只有100,所以对数组下标存的是(选择的数值和左端点的差值) f[i][j][k]即为第i天选了 ...

  10. hdu-1058(map)

    题意:输出第n个能拆分成由,2,3,5,7中的一个或者多个组成的数: 解题思路:a[i+1]=a[i]*2;a[i+2]=a[i]*3;a[i+3]=a[i]*5;a[i+4]=a[i]*7;然后把重 ...