BZOJ 3932 [CQOI2015]任务查询系统 - 差分 + 主席树
Solution
差分就好了, 在$s_i$ 的点+1, $e_i + 1$ 的点 - 1。
查询的时候注意$l == r$ 要返回 $k * b[l]$ ,而不是$sum[node] $因为当前位置的个数可能大于$k$
最后再心疼自己因为神奇建树挂死2333, 被大佬喷了(
Code
#include<cstdio>
#include<cstring>
#include<algorithm>
#define rd read()
#define ll long long
using namespace std; const int N = 2e5 + 1e3; int n, m, num;
int b[N], tot, nd_num;
int lson[N * ], rson[N * ], root[N << ], cnt[N * ];
ll lastans = , sum[N * ]; struct node {
int d, pos, x;
}a[N << ]; int read() {
int X = , p = ; char c= getchar();
for( ;c > '' || c < ''; c = getchar()) if( c == '-') p = -;
for(; c >= '' && c <= ''; c = getchar()) X = X * + c - '';
return X * p;
} int cmp(const node &A, const node &B) {
return A.x < B.x;
} int fd(int x) {
return lower_bound(b + , b + + tot, x) - b;
} void change(int last, int &now, int pos, int d, int l, int r) {
now = ++nd_num;
sum[now] = sum[last] + d * b[pos];
cnt[now] = cnt[last] + d;
lson[now] = lson[last];
rson[now] = rson[last];
if(l == r) return;
int mid = (l + r) >> ;
if(pos <= mid)
change(lson[last], lson[now], pos, d, l, mid);
else
change(rson[last], rson[now], pos, d, mid + , r);
} ll query(int now, int k, int l, int r) {
if(cnt[now] < k) return sum[now];
if(l == r)
return b[l] * k;
int mid = (l + r) >> , tmp;
if((tmp = cnt[lson[now]]) >= k)
return query(lson[now], k, l, mid);
else
return sum[lson[now]] + query(rson[now], k - tmp, mid + , r);
} int main()
{
n = rd; m = rd;
for(int i = ; i <= n; ++i) {
int l = rd, r = rd, pos = rd;
a[++num].d = ;
a[num].pos = pos;
a[num].x = l;
a[++num].d = -;
a[num].pos = pos;
a[num].x = r + ;
b[++tot] = pos;
}
sort(b + , b + + tot);
tot = unique(b + , b + + tot) - b - ;
sort(a + , a + + num, cmp);
for(int i = , j = ; i <= m; ++i) {
root[i] = root[i - ];
for(; j <= num && a[j].x == i; ++j) {
change(root[i], root[i], fd(a[j].pos), a[j].d, , tot);
}
}
for(int i = ; i <= m; ++i) {
int x = rd, A = rd, B = rd, C = rd, k;
k = + (A * lastans + B) % C;
lastans = query(root[x], k, , tot);
printf("%lld\n", lastans);
}
}
BZOJ 3932 [CQOI2015]任务查询系统 - 差分 + 主席树的更多相关文章
- 2018.06.30 BZOJ 3932: [CQOI2015]任务查询系统(主席树)
3932: [CQOI2015]任务查询系统 Time Limit: 20 Sec Memory Limit: 512 MB Description 最近实验室正在为其管理的超级计算机编制一套任务管理 ...
- bzoj 3932 [CQOI2015]任务查询系统(主席树)
Description 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分. 超级计算机中的任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si ...
- [BZOJ3932][CQOI2015]任务查询系统(差分+主席树)
题面 分析 对于一个区间修改(s,e,v),我们可以将它差分,这样就变成了单点修改s和e+1(s插入,t+1删除) 我们用主席树维护差分数组的前缀和,第i棵主席树维护区间[1,i]之间的所有差分值 那 ...
- BZOJ_3932_[CQOI2015]任务查询系统_主席树
BZOJ_3932_[CQOI2015]任务查询系统_主席树 题意: 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,P ...
- bzoj 3932: [CQOI2015]任务查询系统 -- 主席树 / 暴力
3932: [CQOI2015]任务查询系统 Time Limit: 20 Sec Memory Limit: 512 MB Description 最近实验室正在为其管理的超级计算机编制一套任务管 ...
- bzoj3932 / P3168 [CQOI2015]任务查询系统(主席树+差分)
P3168 [CQOI2015]任务查询系统 看到第k小,就是主席树辣 对于每一段任务(a,b,k),在版本a的主席树+k,版本b+1的主席树-k 同一时间可能有多次修改,所以开个vector存操作, ...
- BZOJ3932 CQOI2015 任务查询系统 【主席树】
BZOJ3932 CQOI2015 任务查询系统 Description 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的任务用三元组(Si,Ei, ...
- BZOJ.3932.[CQOI2015]任务查询系统(主席树 差分)
题目链接 对于这一区间的操作,我们可以想到差分+前缀和(感觉也没什么别的了..). 同时对于本题我们能想到主席树,而主席树正是利用前一个节点建树的. 所以离散化.按时间排序,把操作拆成单点加和减即可. ...
- BZOJ 3932: [CQOI2015]任务查询系统 [主席树]
传送门 题意: 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第Ei秒后结束(第Si秒和Ei秒任务也在运行),其优先级为Pi 调度系统会经常向查询系统询问,第Xi ...
随机推荐
- webpack 中使用 vue-router 注意
//render 会把el指定的容器中所有的内容都清空把#app也会去掉 都在c(app)其中的app组件中展示 所有router-link router-view要写在app这个组件里面 //A ...
- opencv 对RGB图像直接二值化
#include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace st ...
- flume 使用手册
以下jie皆来自官网: 1:首先版本是flume 1.8 查看版本: bin/flume-ng version 2:配置与启动 https://flume.apache.org/FlumeUserG ...
- appium自动化测试之UIautomatorviewer元素定位
appium自动化测试之UIautomatorviewer元素定位 标签(空格分隔): uiautomatorviewer元素定位 前面的章节,已经总结了怎么搭建环境,怎样成功启动一个APP了,这里具 ...
- ISE软件报错
ISE弹出如下报错并关闭程序或在编译时出现PATH类报错 一,解决办法 本人自己试了一下 E:\ISE\14.7\ISE_DS\settings64.bat E:\ISE\14.7\ISE_DS\I ...
- Python全栈开发 列表, 元组 数据类型知识运用及操作 range知识
一.列表 1.什么是列表? 列表是一个可变类型,由 [ ] 表示,每一项元素用逗号隔开.列表能够装大量的数据,可以装对象的对象. 2.列表的索引和切片. 列表和字符串一样,也有索引和切片.只不过列表 ...
- java面试:手写代码
二分查找法. /** * 二分查找法:给定一组有序的数组,每次都从一半中查找.直到找到要求的数据. * 主要是得找到下标的表示方法. */ public class BinaryFind { /** ...
- zabbix 短信报警
使用的短信平台是云片网,接口请看官网短信接口API文档,有示例 进入server服务器存放脚本的文件夹,默认路径是 [root@test zabbix]# cat zabbix_server.conf ...
- pandas中关于DataFrame 去除省略号
#显示所有列 pd.set_option('display.max_columns', None) #显示所有行 pd.set_option('display.max_rows', None) #设置 ...
- linux 切割文件的命令
Head -1000 access.2016.log >> 10000_access.log