【主席树】 [CQOI2015]任务查询系统
模板题...
差分,然后用主席树维护时间点上的优先值和就好了
就是细节烦...
#include<bits/stdc++.h>
#define int long long
#define mid (l+r>>1)
#define writeln(x) write(x),puts("")
#define writep(x) write(x),putchar(' ')
using namespace std;
inline int read(){
int ans=,f=;char chr=getchar();
while(!isdigit(chr)){if(chr=='-') f=-;chr=getchar();}
while(isdigit(chr)){ans=(ans<<)+(ans<<)+chr-;chr=getchar();}
return ans*f;
}void write(int x){
if(x<) putchar('-'),x=-x;
if(x>) write(x/);
putchar(x%+'');
}const int M = 2e5+;
int rt[M*],s[M*],ls[M*],rs[M*],cnt[M*],n,m,lst,x,y,k,a[M],b[M],T;
vector<int> aa[M],bb[M];
void Update(int &x,int y,int l,int r,int p,int opt){
x=++T;ls[x]=ls[y],rs[x]=rs[y],s[x]=s[y]+opt*b[p],cnt[x]=cnt[y]+opt;
if(l==r) return;
if(p<=mid) Update(ls[x],ls[x],l,mid,p,opt);
else Update(rs[x],rs[x],mid+,r,p,opt);
}
int Query(int x,int l,int r,int k){
if(l==r) return s[x]/cnt[x]*k;
int t=cnt[ls[x]];
if(k<=t) return Query(ls[x],l,mid,k);
return Query(rs[x],mid+,r,k-t)+s[ls[x]];
}
signed main(){
n=read(),m=read();
for(int i=,x,y,z;i<=n;i++){
x=read(),y=read();a[i]=b[i]=read();
aa[x].push_back(i),bb[y+].push_back(i);
}sort(b+,b+n+);int len=unique(b+,b+n+)-b-;
for(int i=,pos;i<=m;i++){
rt[i]=rt[i-];
for(int j=;j<aa[i].size();j++){
pos=lower_bound(b+,b+len+,a[aa[i][j]])-b;
Update(rt[i],rt[i],,len,pos,);
}
for(int j=;j<bb[i].size();j++){
pos=lower_bound(b+,b+len+,a[bb[i][j]])-b;
Update(rt[i],rt[i],,len,pos,-);
}
}lst=;
while(m--){
int x=read(),y=read(),z=read(),w=read();
k=(lst*y+z)%w+;
if(k>cnt[rt[x]]) writeln(lst=s[rt[x]]);
else writeln(lst=Query(rt[x],,len,k));
}return ;
}
然而悲伤的是:洛谷上暴力跑的最快惹qaq,排行榜第一页全是暴力,转行打暴力吧
upd:经测试bzoj上暴力跑得也贼快,上了第一页
贴一下暴力代码:
#include<bits/stdc++.h>
#define re register int
using namespace std;
inline int read(){
int ans=,f=;char chr=getchar();
while(!isdigit(chr)){if(chr=='-') f=-;chr=getchar();}
while(isdigit(chr)){ans=(ans<<)+(ans<<)+chr-;chr=getchar();}
return ans*f;
}const int N=1e5+;
struct P{int s,e,p;}a[N];
int n,m,sum;long long ans=;
inline bool cmp(const P&a,const P&b){return a.p<b.p;}
int main(){
n=read(),m=read();
for(int i=;i<=n;i++) a[i].s=read(),a[i].e=read(),a[i].p=read();
sort(a+,a+n+,cmp);re x,q,w,e,k;
while(m--){
x=read(),q=read(),w=read(),e=read();
k=(1ll*q*ans%e+w)%e+;ans=sum=;
for(re i=;i<=n&&sum<k;++i)
if(a[i].s<=x&&x<=a[i].e)ans+=a[i].p,++sum;
printf("%lld\n",ans);
}return ;
}
【主席树】 [CQOI2015]任务查询系统的更多相关文章
- BZOJ_3932_[CQOI2015]任务查询系统_主席树
BZOJ_3932_[CQOI2015]任务查询系统_主席树 题意: 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,P ...
- BZOJ3932: [CQOI2015]任务查询系统 主席树
3932: [CQOI2015]任务查询系统 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 4869 Solved: 1652[Submit][St ...
- 主席树||可持久化线段树||离散化||[CQOI2015]任务查询系统||BZOJ 3932||Luogu P3168
题目: [CQOI2015]任务查询系统 题解: 是一道很经典的题目.大体思路是抓优先级来当下标做主席树,用时刻作为主席树的版本.然而优先级范围到1e7去了,就离散化一遍.然后把每个事件的开始(s). ...
- bzoj3932 / P3168 [CQOI2015]任务查询系统(主席树+差分)
P3168 [CQOI2015]任务查询系统 看到第k小,就是主席树辣 对于每一段任务(a,b,k),在版本a的主席树+k,版本b+1的主席树-k 同一时间可能有多次修改,所以开个vector存操作, ...
- 2018.06.30 BZOJ 3932: [CQOI2015]任务查询系统(主席树)
3932: [CQOI2015]任务查询系统 Time Limit: 20 Sec Memory Limit: 512 MB Description 最近实验室正在为其管理的超级计算机编制一套任务管理 ...
- [CQOI2015]任务查询系统 主席树
[CQOI2015]任务查询系统 LG传送门 以前还没见过主席树的这种写法. 考虑使用差分的思想处理每一个任务,然后所有的东西就都能顺理成章地用主席树维护了,查询的时候和平时的主席树有一点不同,详见代 ...
- 【BZOJ3932】[CQOI2015]任务查询系统 主席树
[BZOJ3932][CQOI2015]任务查询系统 Description 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si, ...
- bzoj 3932: [CQOI2015]任务查询系统 -- 主席树 / 暴力
3932: [CQOI2015]任务查询系统 Time Limit: 20 Sec Memory Limit: 512 MB Description 最近实验室正在为其管理的超级计算机编制一套任务管 ...
- BZOJ3932 CQOI2015 任务查询系统 【主席树】
BZOJ3932 CQOI2015 任务查询系统 Description 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的任务用三元组(Si,Ei, ...
- P3168 [CQOI2015]任务查询系统
题目地址:P3168 [CQOI2015]任务查询系统 主席树的模板题 更模板的在这儿:P3834 [模板]可持久化线段树 1(主席树) 形象的说,P3834是"单点修改,区间查询" ...
随机推荐
- bzoj 2257 (JSOI 2009) 瓶子与燃料
Description jyy就一直想着尽快回地球,可惜他飞船的燃料不够了. 有一天他又去向火星人要燃料,这次火星人答应了,要jyy用飞船上的瓶子来换.jyy 的飞船上共有 N个瓶子(1<=N& ...
- C++源文件的后缀名问题
VC里用cpp作后缀名, 在GCC里默认采用C.cc.cxx作为后缀名 .cpp, .h (VS file).cc, .h (GCC file) C中: 头文件后缀名: .h 源文件后缀名: .c ...
- Vue.js框架的基础指令
Vue.js 渐进式 javascript 框架,可以独立完成前后端分离式web项目的javascript框架 js是页面脚本语言,用来控制或是辅助页面搭建,vue是js功能的集合体. 三大主流前端框 ...
- hive简述
显示表头,当前终端有效 set hive.cli.print.header=true; 查看表结构 desc table; 详细的表结构 desc formatted table; 删除表 drop ...
- 学习笔记——CDQ分治
再次感谢这位大佬的博客:https://www.cnblogs.com/ljc20020730/p/10395866.html CDQ分治,是一种在分治合并中计算前面值对后面答案的贡献的一种算法.今天 ...
- 买不到的数目 /// 结论公式 oj26316
题目大意: 给定a b(这题题意不清 其实a b互质) 设变量x y(x>=0,y>=0),求 x*a+y*b=c 找到最大的不可能达到的c 如a=4 b=7 那么c=14 有这样一个定理 ...
- MySQL 05章_模糊查询和聚合函数
在之前的查询都需要对查询的关机中进行“精确”.“完整”完整的输入才能查询相应的结果, 但在实际开发过程中,通常需要考虑用户可能不知道“精确”.“完整”的关键字, 那么就需要提供一种不太严格的查询方式, ...
- 从Hadoop+Storm架构转向Spark架构
- The linux command 之引用
[me@linuxbox ~]$ echo this is a test this is a test shell 会对echo进行单词分割(word splitting)去除多余的空白. [me@l ...
- laravel sql mode only_full_group_by 解决小记
環境: mysql: 5.7.* Laravel: 5.4.* sql 中使用到了 group by,會提示 500錯誤,將 config/database.php中的 strict的值改爲true, ...