题面

分析

对于一个区间修改(s,e,v),我们可以将它差分,这样就变成了单点修改s和e+1(s插入,t+1删除)

我们用主席树维护差分数组的前缀和,第i棵主席树维护区间[1,i]之间的所有差分值

那么查询我们直接在第i棵主席树里查第k大即可

注意:

1.主席树里面要维护两个值,一个是值落在区间[l,r]内的树的个数cnt,一个是这cnt个数的和

2.注意有多个数相同的情况,查询到叶子节点[l,l]之后,不能直接返回sum,而是应该返回k*b[l],其中b[l]是l离散化之前的值

这里有一组hack数据

in:
3 3
1 1 1
1 2 1
1 3 1
1 0 1 100
2 0 1 100
3 0 1 100rightout:
2
2
1

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#define maxn 300005
#define maxlogn 21
using namespace std;
int m,n;
vector<int>d[maxn];
int b[maxn];
int sz;struct node{
#ifdef DEBUGint l;int r;
#endifint ls;int rs;int cnt;long long sum;
}tree[2*maxn*maxlogn];
int root[maxn*2];
int ptr;
void push_up(int pos){tree[pos].cnt=tree[tree[pos].ls].cnt+tree[tree[pos].rs].cnt;tree[pos].sum=tree[tree[pos].ls].sum+tree[tree[pos].rs].sum;
}
void update(int &pos,int last,int upos,int uval,int flag,int l,int r){pos=++ptr;tree[pos]=tree[last];
#ifdef DEBUGtree[pos].l=l;tree[pos].r=r;
#endifif(l==r){tree[pos].cnt+=flag;tree[pos].sum+=uval*flag;return;}int mid=(l+r)>>1;if(upos<=mid) update(tree[pos].ls,tree[last].ls,upos,uval,flag,l,mid);else update(tree[pos].rs,tree[last].rs,upos,uval,flag,mid+1,r);push_up(pos);
}long long query(int ql,int qr,int qk,int l,int r){if(l==r){//注意多组数据相同的情况,必须要用k*值,不能用sum//见最下方hack数据 return b[l]*qk;}int mid=(l+r)>>1;int lcnt=tree[tree[qr].ls].cnt-tree[tree[ql].ls].cnt;if(qk<=lcnt) return query(tree[ql].ls,tree[qr].ls,qk,l,mid);else return tree[tree[qr].ls].sum-tree[tree[ql].ls].sum+query(tree[ql].rs,tree[qr].rs,qk-lcnt,mid+1,r);
}int main(){int s,e,v;long long xx,aa,bb,cc;scanf("%d %d",&m,&n);for(int i=1;i<=m;i++){scanf("%d %d %d",&s,&e,&v);d[s].push_back(v);d[e+1].push_back(-v);b[++sz]=v;}sort(b+1,b+1+sz);sz=unique(b+1,b+1+sz)-b-1;for(int i=1;i<=n;i++){root[i]=root[i-1];for(int j=0;j<d[i].size();j++){int val=d[i][j];//正数代表插入,负数代表删除int disval=lower_bound(b+1,b+1+sz,abs(val))-b;if(val<0) update(root[i],root[i],disval,abs(val),-1,1,sz);else update(root[i],root[i],disval,abs(val),1,1,sz);}} long long ans=1;for(int i=1;i<=n;i++){scanf("%lld %lld %lld %lld",&xx,&aa,&bb,&cc);long long k=1+(aa*ans+bb)%cc;if(k>tree[root[xx]].cnt) ans=tree[root[xx]].sum;else ans=query(root[0],root[xx],k,1,sz);printf("%lld\n",ans);}
}

转载于:https://www.cnblogs.com/birchtree/p/10851751.html

[BZOJ3932][CQOI2015]任务查询系统(差分+主席树)相关推荐

  1. [CQOI2015]任务查询系统(差分+主席树)

    链接:https://ac.nowcoder.com/acm/problem/19936 来源:牛客网 题目描述 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分. ...

  2. P3168 [CQOI2015]任务查询系统 差分+主席树

    链接在这~:https://www.luogu.org/problem/P3168 主席静态区间修改,单点查询 区间(L,R)加1可以通过差分以后转换为L位置加1,R+1位置减1 我们只需要记录一下, ...

  3. 【BZOJ3932】任务查询系统,主席树与差分的建树思想

    Time:2016.05.08 Author:xiaoyimi 转载注明出处谢谢 传送门 思路: 说真的我一开始做这个题真不知道怎么建树,只知道应该以时间为根建树,记录优先值并维护前缀和,但想不出怎么 ...

  4. P3168-[CQOI2015]任务查询系统【主席树】

    正题 题目链接:https://www.luogu.com.cn/problem/P3168 题目大意 nnn个任务(si,ei,ti)(s_i,e_i,t_i)(si​,ei​,ti​)表示从si∼ ...

  5. 【BZOJ3932】[CQOI2015]任务查询系统 主席树

    [BZOJ3932][CQOI2015]任务查询系统 Description 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si, ...

  6. Bzoj 3932: [CQOI2015]任务查询系统(主席树)

    3932: [CQOI2015]任务查询系统 Time Limit: 20 Sec Memory Limit: 512 MB Description 最近实验室正在为其管理的超级计算机编制一套任务管理 ...

  7. 洛谷P3168 [CQOI2015]任务查询系统 [主席树,差分]

    题目传送门 任务查询系统 题目描述 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任 ...

  8. P3168 [CQOI2015]任务查询系统 主席树 + 差分

    传送门 题意: 思路: 题目中(si,ei,pi)(s_i,e_i,p_i)(si​,ei​,pi​)转换成操作即为在[si,ei][s_i,e_i][si​,ei​]区间内加上pip_ipi​的优先 ...

  9. [CQOI2015]任务查询系统

    题目描述 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第Ei ...

最新文章

  1. python解压版怎么安装不了_python 连接数据库mysql解压版安装配置及遇到问题
  2. 阅读类型HTML,W3C HTML5标准阅读笔记 – 元素分类与内容模型(Content Model)
  3. java cacheutil_Java 常用缓存Cache机制的实现
  4. 浅析微软的网关项目 -- ReverseProxy
  5. Java网络01基本网络概念
  6. 外贸建站前必做的SEO优化?
  7. 线程安全的CopyOnWriteArrayList介绍
  8. 人人网 校内- 日志分享
  9. C标准中的转义字符以及ASC码表
  10. rxj热血江hsf湖私服_如何使用RxJ进行React性思考和动画化移动对象
  11. rabbitMq 删除所有队列 ,还原设置
  12. uni-app 对接第三方h5
  13. C语言指针结构体详解,结构体指针,C语言结构体指针详解
  14. java优化编程 第2版_Java优化编程(第2版)林胜利、王坤茹 pdf
  15. Multi-Exemplar Affinity Propagation
  16. java 拒绝连接_java.net.ConnectException:连接被拒绝
  17. 因果推断笔记——因果图建模之Uber开源的CausalML(十二)
  18. 板载2.5G网卡,新组装电脑无法联网,Win10系统显示“以太网 网络电缆被拔出”的解决方法
  19. 国际化设置 - i18n的简单使用
  20. 从Endnote批量导出参考文献至Latex

热门文章

  1. Java如何支持函数式编程?
  2. 开源 | 如何实现一个iOS AOP框架?
  3. BERT 蒸馏在垃圾舆情识别中的探索
  4. 从零点五开始用Unity做半个2D战棋小游戏(四)
  5. 浅谈《刺客信条》的叙事:刺客和圣殿骑士的冲突与融合
  6. 技术人员是如何分析游戏环境的? 《影之诗》牌组趋势分析
  7. 在安卓上,微信公众号无法分享到QQ的解决办法之一
  8. 2013第四届蓝桥杯Java组省赛题解析
  9. innodb_flush_log_at_trx_commit配置
  10. mybatis必知必会一