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 ...
随机推荐
- Less合并
合并是LESS的一个特性,它允许通过指定的语法来为某个属性添加使用逗号或空格分隔的值的列表.对于文本阴影.盒阴影.背景.变换等允许使用值的列表的属性,合并非常有用. 合并的语法,就是在属性名称和冒号之 ...
- spring中的自定义标签
为了给系统提供可配置化支持,一般会用原生态的方式去解析定义好的XML文件,然后转化为配置对象.这种方式对于简单.单一的配置文件,或者是XML配置格式固定的配置文件,比较容易处理.但是对于一些配置非常复 ...
- jdk1.8hashmap源码解析
/* * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. * ORACLE PROPRIETA ...
- uva 1418 - WonderTeam
题意:你n支球队进行比赛,每两支队伍之间进行2场比赛,胜得3分,平得1分,输得0分,比赛后挑选出一个梦之队,要求进球总数最多,胜利场数最多,失球总数最少,并且三种都不能与其它对比列第一.问说梦之队的最 ...
- nginx: [emerg] the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:37
一:开始Nginx的SSL模块 1.1 Nginx如果未开启SSL模块,配置Https时提示错误 1 nginx: [emerg] the "ssl" parameter requ ...
- Linux多线程编程详细解析----条件变量 pthread_cond_t
Linux操作系统下的多线程编程详细解析----条件变量 1.初始化条件变量pthread_cond_init #include <pthread.h> int pthread_cond_ ...
- 数据库介绍(MySQL安装 体系结构、基本管理)
第1章 数据库介绍及mysql安装 1.1 数据库简介 数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增.截取.更新.删除等操作. 所谓“数据库”系以一定方式 ...
- Solr7.1---数据库导入并建立中文分词器
这里只是告诉你如何导入,生产环境不要这样部署你的solr服务. 首先修改solrConfig.xml文件 备份_default文件夹 修改solrconfig.xml 加入如下内容 官方示例:< ...
- Effective Java 第三版——3. 使用私有构造方法或枚类实现Singleton属性
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
- MapReduce编程(一) Intellij Idea配置MapReduce编程环境
介绍怎样在Intellij Idea中通过创建mavenproject配置MapReduce的编程环境. 一.软件环境 我使用的软件版本号例如以下: Intellij Idea 2017.1 Mave ...