[CQOI2015]任务查询系统 主席树
[CQOI2015]任务查询系统
以前还没见过主席树的这种写法。
考虑使用差分的思想处理每一个任务,然后所有的东西就都能顺理成章地用主席树维护了,查询的时候和平时的主席树有一点不同,详见代码。
关于为什么可以做的一点思考:主席树其实类似于求前缀和,平时我们是用来区间查询,这里对于差分后的信息用主席树一维护,就变成了原来的信息,可以单点查询,而我们这道题的要求正好是区间修改单点查询。
//written by newbiechd
#include <cstdio>
#include <cctype>
#include <algorithm>
#define R register
#define I inline
#define B 1000000
#define L long long
using namespace std;
const int N = 100003, M = 1e7;
char buf[B], *p1, *p2;
I char gc() { return p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, B, stdin), p1 == p2) ? EOF : *p1++; }
I int rd() {
R int f = 0;
R char c = gc();
while (c < 48 || c > 57)
c = gc();
while (c > 47 && c < 58)
f = f * 10 + (c ^ 48), c = gc();
return f;
}
int rt[N], T;
struct task {
int t, p, d;
task () {}
task (int t, int p, int d) : t(t), p(p), d(d) {}
I int operator < (const task &x) { return t < x.t; }
}t[N << 1];
struct segtree {
int p, q, s;
L t;
}e[N << 6];
int insert(int k, int l, int r, int x, int y) {
R int t = ++T;
e[t] = e[k], e[t].s += y, e[t].t += y * x;
if (l == r)
return t;
R int m = (l + r) >> 1;
if (x <= m)
e[t].p = insert(e[k].p, l, m, x, y);
else
e[t].q = insert(e[k].q, m + 1, r, x, y);
return t;
}
L query(int k, int l, int r, int x) {
if (l == r)
return l * x;
R int m = (l + r) >> 1, t = e[e[k].p].s;
if (x <= t)
return query(e[k].p, l, m, x);
else
return e[e[k].p].t + query(e[k].q, m + 1, r, x - t);
}
int main() {
int m = rd(), n = rd(), S = 0, i, j, x, y, z;
L ans = 1;
for (i = 1; i <= m; ++i)
x = rd(), y = rd(), z = rd(),
t[++S] = task(x, z, 1), t[++S] = task(y + 1, z, -1);
sort(t + 1, t + S + 1);
for (i = 1, j = 1; i <= n; ++i) {
rt[i] = rt[i - 1];
for (; j <= S && t[j].t == i; ++j)
rt[i] = insert(rt[i], 1, M, t[j].p, t[j].d);
}
for (i = 1; i <= n; ++i) {
x = rd(), y = (ans * rd() + rd()) % rd() + 1;
if (e[rt[x]].s <= y)
ans = e[rt[x]].t;
else
ans = query(rt[x], 1, M, y);
printf("%lld\n", ans);
}
return 0;
}
[CQOI2015]任务查询系统 主席树的更多相关文章
- BZOJ3932: [CQOI2015]任务查询系统 主席树
3932: [CQOI2015]任务查询系统 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 4869 Solved: 1652[Submit][St ...
- 【BZOJ3932】[CQOI2015]任务查询系统 主席树
[BZOJ3932][CQOI2015]任务查询系统 Description 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si, ...
- bzoj 3932: [CQOI2015]任务查询系统 -- 主席树 / 暴力
3932: [CQOI2015]任务查询系统 Time Limit: 20 Sec Memory Limit: 512 MB Description 最近实验室正在为其管理的超级计算机编制一套任务管 ...
- 洛谷P3168 [CQOI2015]任务查询系统 [主席树,差分]
题目传送门 任务查询系统 题目描述 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任 ...
- BZOJ 3932: [CQOI2015]任务查询系统 [主席树]
传送门 题意: 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第Ei秒后结束(第Si秒和Ei秒任务也在运行),其优先级为Pi 调度系统会经常向查询系统询问,第Xi ...
- BZOJ3932[CQOI2015]任务查询系统——主席树
题目描述 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第E ...
- BZOJ.3932.[CQOI2015]任务查询系统(主席树 差分)
题目链接 对于这一区间的操作,我们可以想到差分+前缀和(感觉也没什么别的了..). 同时对于本题我们能想到主席树,而主席树正是利用前一个节点建树的. 所以离散化.按时间排序,把操作拆成单点加和减即可. ...
- BZOJ 3932: [CQOI2015]任务查询系统 | 主席树练习题
题目: 洛谷也能评测 题解: De了好长时间BUG发现是自己sort前面有一行for没删,气死. 题目询问第x秒时候前k小的P值之和. 朴素想法: 我们可以把P值离散化,然后对于每个时刻建一棵定义域是 ...
- BZOJ 3932: [CQOI2015]任务查询系统 (主席树板题)
就是裸的主席树,差分之后排序插入主席树就行了. 注意主席树查询的时候叶子节点要特判,因为本身是有size的 还有要开longlong CODE #include <cctype> #inc ...
随机推荐
- Oracle 补丁那些事儿(PS、PSU、CPU、SPU、BP、DBBP…)
当前ORACLE数据库提供两种方式的补丁一种是主动的Proactive Patches和另一种被动的Reactive Patches,其中Reactive Patches是指过去的ONE-OFF Pa ...
- pycharm something
e1:使用的版本2016.3 发现无法执行py程序,执行菜单为灰色.选择py为2.7. e2:使用过jython可以运行,但是语法有问题str.formate无法执行
- 使用NSClassFromString
使用NSClassFromString 使用NSClassFromString可以直接从字符串初始化出对象出来,即使不引用头文件也没关系,以下是源码: AppDelegate.m // // AppD ...
- 获取系统屏幕尺寸参数的类WxHxD
获取系统屏幕尺寸参数的类WxHxD 源码: // // WxHxD.h // PM2.5 // // Created by YouXianMing on 14/10/29. // Copyright ...
- Python学习---爬虫学习[scrapy框架初识]
Scrapy Scrapy是一个框架,可以帮助我们进行创建项目,运行项目,可以帮我们下载,解析网页,同时支持cookies和自定义其他功能. Scrapy是一个为了爬取网站数据,提取结构性数据而编写的 ...
- esxcli software vib 命令为 ESXi 5.x/6.x 主机安装补丁程序 (2008939)
参考KB:https://kb.vmware.com/s/article/2008939?lang=zh_CN Symptoms 免责声明:本文为 “esxcli software vib” ...
- RedHat 7 安装PostgreSQL 10.5
系统环境 Redhat: Version: 7.4.1708 Architecture: x86_64 Address: 10.127.1.11 User: root Uassword: redhat ...
- zabbix图形插件:Graphtree
目的:为了达图形聚合 参考博文:https://blog.csdn.net/mysunshineto/article/details/80242754 Graphtree由OneOaaS开发并开源出来 ...
- ORACLE分区表操作
ORACLE分区表的操作应用 摘要:在大量业务数据处理的项目中,可以考虑使用分区表来提高应用系统的性能并方便数据管理,本文详细介绍了分区表的使用. 在大型的企业应用或企业级的数据库应用中,要处理的数据 ...
- 【转】Android中获取应用程序(包)的信息-----PackageManager的使用(一)
转载请注明出处:http://blog.csdn.net/qinjuning 本节内容是如何获取Android系统中应用程序的信息,主要包括packagename.label.icon.占 ...