Time:2016.05.08
Author:xiaoyimi
转载注明出处谢谢


传送门
思路:
说真的我一开始做这个题真不知道怎么建树,只知道应该以时间为根建树,记录优先值并维护前缀和,但想不出怎么用到主席树的前缀建树思想,暴力建树+修改肯定是不科学的……
后来去看题解,发现又是差分。
回想起被运输计划支配的恐惧……(还是自己太弱的缘故)
不过这个差分比较简单,因为它正好利用了第i棵主席树以第i-1棵树为基础建树的思路,比如某一任务的时间区间为[l,r],优先度为p,那么我们在root[l]上建树时+p,root[r+1]上建树时-p,这样的话就可以在枚举每个时间点的操作来建树了,因为有m个任务,每个任务有两个时间点的操作,所以最多建2m棵树,每个时间点所代表的主席树就是它最后一次修改所建的树,记录每个时间点最后被操作时所建的树的编号pos[i],查询操作就是空树与pos[i]相减得到了,这是主席树的基本操作,不过多赘述
注意:
1.简单计算可以得到这里的sum最多可以是100000*100000,超过了int,所以sum用long long计算
2.对于每个时间点的修改,有+有-,所以在原先的建树代码上稍作修改即可,记录系数什么的
代码:

#include<bits/stdc++.h>
#define M 100004
#define LL long long
#define ls(x) a[x].ch[0]
#define rs(x) a[x].ch[1]
using namespace std;
int n,m,cnt,k;
int ID[M],S[M],E[M],P[M],pos[M];
LL lastans=1;
vector <int> t[M];
struct disc
{int data,id;bool operator <(const disc other)const{return data<other.data;}
}b[M];
struct Chairman_tree
{int siz,ch[2];LL sum;
}a[M<<6];
int in()
{char ch=getchar();int t=0;while (!isdigit(ch)) ch=getchar();while (isdigit(ch)) t=(t<<3)+(t<<1)+ch-48,ch=getchar();return t;
}
void build(int now,int L,int R,int rt,int k,int val)
{a[rt].siz=a[now].siz+k;a[rt].sum=a[now].sum+k*ID[val];if (L==R) return;int mid=(L+R)>>1;if (mid>=val)rs(rt)=rs(now),ls(rt)=++cnt,build(ls(now),L,mid,ls(rt),k,val);elsels(rt)=ls(now),rs(rt)=++cnt,build(rs(now),mid+1,R,rs(rt),k,val);
}
LL get(int begin,int end,int L,int R,int k)
{if (begin==end) return a[R].sum-a[L].sum;int mid=(begin+end)>>1,t=a[ls(R)].siz-a[ls(L)].siz;if (k<=t)return get(begin,mid,ls(L),ls(R),k);elsereturn a[ls(R)].sum-a[ls(L)].sum+get(mid+1,end,rs(L),rs(R),k-t);
}
main()
{m=in();n=in();for (int i=1;i<=m;i++)S[i]=in(),E[i]=in(),P[i]=in(),b[i].id=i,b[i].data=P[i];sort(b+1,b+m+1);for (int i=1;i<=m;i++)ID[i]=b[i].data,P[b[i].id]=i;cnt=1; for (int i=1;i<=m;i++)t[S[i]].push_back(P[i]),t[E[i]+1].push_back(-P[i]), cnt+=1+(E[i]+1<=n);for (int rt=1,i=1;i<=n;i++){for (int j=0;j<t[i].size();j++)build(rt,1,n,rt+1,t[i][j]/abs(t[i][j]),abs(t[i][j])),rt++;pos[i]=rt;}int x;for (int i=1;i<=n;i++)x=in(),k=(lastans*in()+in())%in()+1,printf("%lld\n",lastans=get(1,n,1,pos[x],k));
}

【BZOJ3932】任务查询系统,主席树与差分的建树思想相关推荐

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

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

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

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

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

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

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

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

  5. Distance on the tree(树上倍增+主席树+树上差分+lca)南昌网络赛

    题目链接:南昌邀请赛网络赛Distance on the tree 统计一条链上边权小于k的边数. 树上差分,对于边权来说,一条链上的边的条数=sum[x]+sum[y]-2*sum[lca(x,y) ...

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

    题面 分析 对于一个区间修改(s,e,v),我们可以将它差分,这样就变成了单点修改s和e+1(s插入,t+1删除) 我们用主席树维护差分数组的前缀和,第i棵主席树维护区间[1,i]之间的所有差分值 那 ...

  7. HDU 5919 Sequence II 主席树

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5919 Sequence II Time Limit: 9000/4500 MS (Java/Othe ...

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

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

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

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

最新文章

  1. 2021年Facebook博士生奖研金名单公布!一半获奖者是华人博士生
  2. 假如易立竞吐槽程序员......
  3. oracle雾化试图_Oracle创建物化视图
  4. 成对的交换链表的节点 Swap Nodes in Pairs
  5. 今天介绍一款强大的服务器开发工具(JRebel)
  6. 2020教资高频考点作文素材汇总
  7. NET问答: C# 中有哪些 HttpPost 工具包
  8. 【转】linux命令:ifconfig命令
  9. io python 读取pdf_python自动化办公之 Python 解析 PDF
  10. Oracle全备增量备份脚本,ORACLE-RMAN:备份脚本(全库,增量)
  11. 初始----python数字图像处理--:环境安装与配置
  12. AD19调用器件封装时报错Access violation at address 0000000141A9EDD4 in module 'IntegratedLibrary.DLL'.
  13. GitHub 新手教程 四,Git GUI 新手教程(1),OpenSSH Public Key
  14. html在线直播ppt,PPT在HTML网页上播放方法
  15. 2011年50大最佳网站
  16. 在已有win7系统的基础上重装win10系统
  17. C/C++一些常见的错误
  18. otis电梯服务器tt使用说明_OTIS电梯TT使用说明
  19. java中的命名规则(超详细~~),变量、类名、方法名
  20. iOS开发学无止境 - 6个iOS图片文本设计的小技巧

热门文章

  1. 【云速建站】表单应用
  2. 大前端的自动化工厂(2)—— SB Family
  3. Head First设计模式读书笔记十 第十一章 代理模式
  4. Java到底是不是值传递
  5. GprMax 3.1.5 建模的in文件编写详解(1)
  6. 《数学的思维方式与创新》课程感悟与总结
  7. C++学习系列笔记(二)
  8. python控制语句字符串截取_菜鸟python---流程控制语句
  9. Java方法02 递归
  10. java webservice 验证_SOAP header验证WebService接口的访问权限