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 ...
随机推荐
- 1.5.3、CDH 搭建Hadoop在安装之前(定制安装解决方案---创建群集主机的虚拟映像)
创建群集主机的虚拟映像 您可以使用预先部署的Cloudera软件创建虚拟机映像,例如PXE启动映像,Amazon AMI和Azure VM映像,这些映像可用于快速启动虚拟机.这些图像使用parcel来 ...
- 1.3.4、CDH 搭建Hadoop在安装之前(端口---Impala使用的端口)
Impala使用的端口 Impala使用下表中列出的TCP端口.在部署Impala之前,请确保在每个系统上打开这些端口. Component Service Port Access Requireme ...
- 解题(PockerCompare-扑克牌比较大小)
题目描述 扑克牌游戏大家应该都比较熟悉了,一副牌由54张组成,含3~A.2各4张,小王1张,大王1张.牌面从小到大用如下字符和字符串表示(其中,小写joker表示小王,大写JOKER表示大王):3 4 ...
- c++中的类(class)-----笔记(类模板)
1,一个模板类至少具有一个类参数,类参数是个符号以表示将要被某个确定数据类型代替的类型. #include<iostream> #include<string> using n ...
- as3.0划线带撤销功能
package com{ import flash.display.MovieClip; import flash.display.SimpleButton; import flash.events. ...
- Android 集成高德地图
先上一张图片看看实现的效果啦!!! 首先登陆高德的开发者平台进行创建自己的应用程序,填写对应的包名,填写sHA1值(这个我这博客中写了获取的代码,可以直接复制粘贴),说了这么多其实都是废话,来我们看重 ...
- 消除游戏源码 Match 3 Jewel Full 298 Levels
Match 3 Jewel Full 298 Levels 一款unity3d编写的消消乐游戏, 关卡丰富,很好玩 下载地址:点击下载
- java编程 求和
用java编程,实现字符串强制类型转化成整数型,用到Integer.parseInt(),可以把字符串强制转换成整数 结果截图
- f5 V11 TMSH命令行操作手册
1.命令行登录工具:“SshClient.exe” 2.查看当前系统配置: # show running-config # show running-config net interface:网络接口 ...
- JDBC、ODBC、OLE DB、ADO、ADOMD区别与联系
ODBC: (Open Database Connectivity,开放数据库互连),它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口).这些API利用SQL来完成其大部分任务 ...