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 ...
随机推荐
- 四、Hadoop学习笔记————各种工具用法
hive基本hql语法 Sqoop(发音:skup)是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql.postgresql...)间进行数据的传递,可以将一个关系型数据库 ...
- O(nlogn)算法,最长上升子序列,,非动规
//最长上升子序列最快算法,非动态规划,运用了二分思想,还有栈的思想, //用每一个数去和栈中的栈顶元素相比较,如果大于栈顶元素,则入栈,否则运用二分查找,寻找出第一个比这个数大的那个数替换 #inc ...
- HDU2546--饭卡(01背包)
饭卡 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...
- mysql最佳优化经验
今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数据 ...
- js 实现div模块的截图并下载功能(可制作长图)
当需要实现html页面部分模块截图并具有保存图片功能时,前台直接生成截图并下载会方便的多.多的不说,直接看代码首先我们需要引入2个js文件: <script type="text/ja ...
- jq,返回上一页,小记history.back(-1)和history.go(-1)区别
<input type="button" name="back" value="重新填写" onclick="javascr ...
- Linux send和recv
1.send 函数 int send( SOCKET s, const char FAR *buf, int len, int flags ); 不论是客户还是服务器应用程序都用send函数来向TCP ...
- Scala入门系列(十二):隐式转换
引言 Scala提供的隐式转换和隐式参数功能,是非常有特色的功能.是Java等编程语言所没有的功能.它可以允许你手动指定,将某种类型的对象转换成其他类型的对象.通过这些功能可以实现非常强大而且特殊的功 ...
- 出现JSONvalue failed .error is Illegal start of token
出现JSONvalue failed .error is Illegal start of token了? 别着急,抽根烟,喝杯水.开工: 1:判断是请求前报的错还是请求后报的错!!这个很重要,我就是 ...
- javaweb学习总结(四)——Http协议(转)
转载自 http://www.cnblogs.com/xdp-gacl/p/3751277.html 一.什么是HTTP协议 HTTP是hypertext transfer protocol(超文本传 ...