bzoj 3932: [CQOI2015]任务查询系统
Description
Input
Output
Sample Input
1 2 6
2 3 3
1 3 2
3 3 4
3 1 3 2
1 1 3 4
2 2 4 3
Sample Output
8
11
HINT
Source
唉,一道主席树板子题竟然WA得怀疑人生。。。
首先任务是[s,t]这一段出现,我们可以选择区间加法也可以选择直接差分,显然差分好打得多。。。
也就是说把询问拆成两个,一个是在s加,另一个是在t+1减。。。把这些事件按时间排序。。。
我们对于每一个时间点建立一颗权值线段树,然后先复制前一个时间点的历史版本。。。
然后一个一个的把该时间点的事件加入,该点的权值线段树中,此时以自己为历史版本。。。
然后query的就是一个很正常的一个权值线段树上的区间求和,然而这样会获得80分。。。
query 的递归边界(l==r)时,一个权值上可能有多个任务,就是说可能大于query传上来的K。。
所以我们要return sum[x]/size[x]*K。。。
哦,忘了说要离散化一下。。。
// MADE BY QT666
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<iostream>
#include<cstring>
#define int long long
using namespace std;
typedef long long ll;
const int N=100050;
int root[N*2],ls[N*40],rs[N*40],sum[N*40],size[N*40],sz;
int hsh[N],tot,m,n,cnt;
struct data{
int t,val,type;
}q[N*2];
bool cmp(const data &a,const data &b){
return a.t<b.t;
}
void insert(int &y,int x,int l,int r,int v,int type){
y=++sz;size[y]=size[x]+type;
ls[y]=ls[x];rs[y]=rs[x];
sum[y]=sum[x]+hsh[v]*type;
if(l==r) return;
int mid=(l+r)>>1;
if(v<=mid) insert(ls[y],ls[x],l,mid,v,type);
else insert(rs[y],rs[x],mid+1,r,v,type);
}
int query(int x,int l,int r,int K){
if(l==r){
if(size[x]) return sum[x]/size[x]*K;
else return 0;
}
int mid=(l+r)>>1;
if(size[ls[x]]>=K) return query(ls[x],l,mid,K);
else return sum[ls[x]]+query(rs[x],mid+1,r,K-size[ls[x]]);
}
main(){
scanf("%lld%lld",&m,&n);
for(int i=1;i<=m;i++){
int st,ed,p;scanf("%lld%lld%lld",&st,&ed,&p);
q[++cnt]=(data){st,p,1};q[++cnt]=(data){ed+1,p,-1};
hsh[++tot]=p;
}
sort(hsh+1,hsh+1+tot);tot=unique(hsh+1,hsh+tot+1)-hsh-1;
sort(q+1,q+1+cnt,cmp);
for(int i=1;i<=cnt;i++) q[i].val=lower_bound(hsh+1,hsh+1+tot,q[i].val)-hsh;
int j=1;
for(int i=1;i<=n;i++){
root[i]=root[i-1];
while(q[j].t<=i&&j<=cnt) insert(root[i],root[i],1,m,q[j].val,q[j].type),j++;
}
int pre=1;
for(int i=1;i<=n;i++){
int x,a,b,c;scanf("%lld%lld%lld%lld",&x,&a,&b,&c);
int k=1+(a*pre+b)%c;
k=min(k,size[root[x]]);pre=query(root[x],1,m,k);
printf("%lld\n",pre);
}
return 0;
}
bzoj 3932: [CQOI2015]任务查询系统的更多相关文章
- 2018.06.30 BZOJ 3932: [CQOI2015]任务查询系统(主席树)
3932: [CQOI2015]任务查询系统 Time Limit: 20 Sec Memory Limit: 512 MB Description 最近实验室正在为其管理的超级计算机编制一套任务管理 ...
- 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 ...
- BZOJ 3932: [CQOI2015]任务查询系统 [主席树]
传送门 题意: 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第Ei秒后结束(第Si秒和Ei秒任务也在运行),其优先级为Pi 调度系统会经常向查询系统询问,第Xi ...
- BZOJ 3932 [CQOI2015]任务查询系统 ——可持久化线段树
[题目分析] 主席树,维护区间大小以及权值之和. 但是细节确实要琢磨很久,WA了几次. [代码] #include <cstdio> #include <cstring> #i ...
- BZOJ 3932 [CQOI2015]任务查询系统 - 差分 + 主席树
Solution 差分就好了, 在$s_i$ 的点+1, $e_i + 1$ 的点 - 1. 查询的时候注意$l == r$ 要返回 $k * b[l]$ ,而不是$sum[node] $因为当前位置 ...
- BZOJ.3932.[CQOI2015]任务查询系统(主席树 差分)
题目链接 对于这一区间的操作,我们可以想到差分+前缀和(感觉也没什么别的了..). 同时对于本题我们能想到主席树,而主席树正是利用前一个节点建树的. 所以离散化.按时间排序,把操作拆成单点加和减即可. ...
- BZOJ 3932: [CQOI2015]任务查询系统 | 主席树练习题
题目: 洛谷也能评测 题解: De了好长时间BUG发现是自己sort前面有一行for没删,气死. 题目询问第x秒时候前k小的P值之和. 朴素想法: 我们可以把P值离散化,然后对于每个时刻建一棵定义域是 ...
- BZOJ 3932: [CQOI2015]任务查询系统 (主席树板题)
就是裸的主席树,差分之后排序插入主席树就行了. 注意主席树查询的时候叶子节点要特判,因为本身是有size的 还有要开longlong CODE #include <cctype> #inc ...
随机推荐
- C# winform 程序开发知识点总结(干货)
1.数据库连接及操作 在说数据库操作之前,先说一下数据库连接操作字符串的获取 首先,点击服务器资源管理器,接下来选中数据连接右键点击添加连接,填入你要连接的服务器名称,点击单选框使用SQL Serve ...
- memcached一致性哈希及php客户端实现
1.memcached分布式算法 memcached的分布式是依靠客户端的算法来实现,假设键名为$key,服务器数量为N,常规的实现方式有两种: 取模哈希 crc32($key)%N,通过这个算法将键 ...
- Xshell显示图形化界面
前言 很久没用过图形化界面了,都忘记怎么使用了.... 依据以往的经验都是由环境变量DISPLAY设置,然后就能连接了,每天也是匆匆忙忙的就过了一天,都不知道干了啥,分配的时间也少,但是一直纠结,进行 ...
- c# AutoMapper 使用方式
安装方式:使用vs自带的nuget管理工具,搜索AutoMapper ,选择第一个安装到你的项目即可. 我从网上找了一些资料,下载了个demo,然后自己又写了一遍,我把AutoMapper 的使用分为 ...
- 一些公司对quantitative的要求
来自日月光华BBS: Company: UBS AG Job Title: Quantitative Developers / Analysts (Entry Level, Multiple Posi ...
- Centos7.0 下挂载磁盘
参考:
- 实践作业2:黑盒测试实践——选择并下载测试工具 Day 2
1.选择工具为Katalon Studio 基于 Selenium 和 Appium 框架,Katalon Studio隐藏幕后的所有技术复杂性,并提供友好的用户界面与手动模式(用户可以拖放,选择关键 ...
- NYOJ 119 士兵杀敌(三) RMQ ST
NYOJ 119 士兵杀敌(三) RMQ ST 题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=119 思路: ST在线 预处理O(nlog ...
- HDU1171--01背包
Big Event in HDU Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- ThinkPHP 5 中AJAX跨域请求头设置方法
最近用thinkphp做项目,在测试环境时,存在接口的测试问题.在tp官网也没能找到相关的解决方法.自已看了一下源码,有如下的解决方案. 在项目目录下面,创建common/behavior/CronR ...