[CQOI2015]任务查询系统 主席树_差分
Code:
#include<vector>
#include<cstdio>
#include<algorithm>
#include<string>
#include<iostream>
#include<cstring> using namespace std; void SetIO(string a){
string in = a + ".in";
freopen(in.c_str(), "r", stdin);
} const int maxn = 100000 + 4; struct Task{
int st, ed, val;
Task(int st = 0, int ed = 0, int val = 0):st(st), ed(ed), val(val){}
}task[maxn]; int Sorted[maxn]; int n, m; void Read(){
scanf("%d%d",&m,&n);
for(int i = 1;i <= m; ++i)
{
int a, b, c;
scanf("%d%d%d",&a,&b,&c);
task[i] = Task(a, b, c);
Sorted[i] = task[i].val;
}
} struct Type{
int delta, val;
Type(int delta=0, int val=0):delta(delta), val(val){}
};
vector<Type>G[maxn]; void Disperse(){
sort(Sorted + 1, Sorted + 1 + m);
for(int i = 1;i <= m; ++i){ task[i].val = lower_bound(Sorted + 1, Sorted + 1 + m, task[i].val) - Sorted; G[task[i].st].push_back(Type(1, task[i].val));
G[task[i].ed + 1].push_back(Type(-1, task[i].val));
}
} const int Tree_const = 50; int numv[maxn * Tree_const], root[maxn]; long long sumv[maxn * Tree_const]; struct Chair_Tree{ int lson[maxn * Tree_const], rson[maxn * Tree_const], cnt_Tree; void build(int l, int r, int &o){
if(l > r) return ; o = ++cnt_Tree; if(l == r) return ; int mid = (l + r) >> 1; build(l, mid, lson[o]);
build(mid + 1, r, rson[o]);
} int insert(int l, int r, int o, int pos, int delta){
int oo = ++cnt_Tree;
lson[oo] = lson[o];
rson[oo] = rson[o];
numv[oo] = numv[o] + delta;
sumv[oo] = sumv[o] + delta * Sorted[pos];
int mid = (l + r) >> 1; if(l == r) return oo; if(pos <= mid)
lson[oo] = insert(l, mid, lson[o], pos, delta);
else
rson[oo] = insert(mid + 1, r, rson[o], pos, delta); return oo;
} long long query(int l, int r, int cur, int k){
if(l == r) return k * Sorted[l]; int lnum = numv[lson[cur]] ;
int mid = (l + r) >> 1; if(k <= lnum)
return query(l, mid,lson[cur], k);
else
return sumv[lson[cur]] + query(mid + 1, r, rson[cur], k - lnum);
} }Tree; void Build(){ Tree.build(1, m, root[0]); for(int i = 1;i <= n; ++i){
int siz = G[i].size();
int rt = root[i - 1]; for(int j = 0;j < siz; ++j){
rt = Tree.insert(1, m, rt, G[i][j].val, G[i][j].delta);
}
root[i] = rt;
} } void Init(){
Read();
Disperse();
Build();
} void Work(){
long long pre = 1;
for(int i = 1;i <= n; ++i){
int x, k, a, b, c;
scanf("%d%d%d%d",&x,&a,&b,&c);
k = 1 + (a * pre + b) % c; if(numv[root[x]] < k)
pre = sumv[root[x]] ;
else
pre = Tree.query(1, m, root[x], k);
printf("%lld\n", pre);
}
} int main(){
SetIO("input");
Init();
Work();
return 0;
}
[CQOI2015]任务查询系统 主席树_差分的更多相关文章
- 洛谷P3168 [CQOI2015]任务查询系统 [主席树,差分]
题目传送门 任务查询系统 题目描述 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任 ...
- BZOJ3932: [CQOI2015]任务查询系统 主席树
3932: [CQOI2015]任务查询系统 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 4869 Solved: 1652[Submit][St ...
- [CQOI2015]任务查询系统 主席树
[CQOI2015]任务查询系统 LG传送门 以前还没见过主席树的这种写法. 考虑使用差分的思想处理每一个任务,然后所有的东西就都能顺理成章地用主席树维护了,查询的时候和平时的主席树有一点不同,详见代 ...
- bzoj 3932: [CQOI2015]任务查询系统 -- 主席树 / 暴力
3932: [CQOI2015]任务查询系统 Time Limit: 20 Sec Memory Limit: 512 MB Description 最近实验室正在为其管理的超级计算机编制一套任务管 ...
- 【BZOJ3932】[CQOI2015]任务查询系统 主席树
[BZOJ3932][CQOI2015]任务查询系统 Description 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si, ...
- BZOJ.3932.[CQOI2015]任务查询系统(主席树 差分)
题目链接 对于这一区间的操作,我们可以想到差分+前缀和(感觉也没什么别的了..). 同时对于本题我们能想到主席树,而主席树正是利用前一个节点建树的. 所以离散化.按时间排序,把操作拆成单点加和减即可. ...
- 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]任务查询系统 (主席树板题)
就是裸的主席树,差分之后排序插入主席树就行了. 注意主席树查询的时候叶子节点要特判,因为本身是有size的 还有要开longlong CODE #include <cctype> #inc ...
随机推荐
- .NET Datatable常用系列一
Datatable常用系列一 一.用作集合存储数据: DataTable dt = new DataTable("action"); for (int i = 0; i < ...
- Android 的永久登陆 与注销登陆
一.永久登陆 sharedprefrence 存储 userID 以及 password private String FILE = "saveUserNamePwd";//用于 ...
- POJ 1611 The Suspects【并查集】
解题思路:一共给出 n个人,m组,接下来是m组数据,每一组开头是该组共有的人 num,则接下来输入的num个数,这些数是一组的 又因为最开始只有编号为0的人携带有病毒,且只有同一组的人会相互传染,问最 ...
- SpringMVC框架入门
简介 SpringMVC采用模型(Model)-视图(View)-控制器(controller)的方法把业务逻辑.数据与界面显示分离.用通俗的话来讲,MVC的理念就是把数据处理.数据展示和程序/用户的 ...
- 郑晔谈 Moco 框架的开发:写一个好的内部 DSL ,写一个表达性好的程序
作者:张龙 出处:http://www.infoq.com/cn/news/2013/07/zhengye-on-moco 郑晔谈Moco框架的开发:写一个好的内部DSL,写一个表达性好的程序 作者 ...
- 正式版的Linux Kernel 5.1来了,非LTS
大神Linus Torvalds于今天发布了Linux Kernel 5.1内核正式版,在对现有功能进行改进的同时还带来了很多重要的改进.本次版本更新历时一个半月,不过值得注意的是它并非是长期支持版本 ...
- shell 的变量
一.自定义变量 1.字母或者下划线开头,由字母.数字.下划线组成,大小写敏感,在使用变量时,要在变量前加上前缀 $,一般变量由大写字母表示,并且英文开头,"=" 两边应没有空格.如 ...
- WinServer-AD域控入门
计算机账户和用户账户的区别 域控中不需要事先建立计算机账户,但必须建立登录用户账户. 计算机只要知道域控管理员或者授权管理账户,就可以利用此账户为所有计算机加域. 计算机加域成功之后,都会在AD管理里 ...
- COGS——T 1168. 机器调度
http://www.cogs.pro/cogs/problem/problem.php?pid=1168 ★★ 输入文件:machine.in 输出文件:machine.out 简单对比 ...
- Eclipse配置Maven私服
Eclipse配置Maven私服 前言: 搭建Maven私有仓库的主要目的,是为了在团队多人开发时,只要内网的私有仓库有下载过依赖的jar包,就直接从私有仓库获取,不再通过外网的中央仓库.如果私服上面 ...