传送门

又是一句经常见到的话……做完这题对主席树的理解会更好一些……

这道题把普通的主席树单点修改区间查询改成了区间修改单点查询。这个的话我们可以改成差分解决……把一个操作改成两个,然后把所有操作按照时间进行排序。注意这里修改细节很多,因为可能在一个时间上有很多操作,所以我们要先继承上一个时间点的根的情况,然后对于本时间点的操作,自己继承自己就可以了。

然后在查询的时候,这次是直接单点查询。每次以它的右子树权值大小为判定标准进行分类递归计算。(具体看代码)当最后只剩下一个优先级的时候,他有可能不够k个,所以要先除以它的个数再乘以k,即\(sum_p / num_p \times k\),这样计算就可以了。

最后注意优先级要离散化。

看一下代码。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<queue>
#include<cstring>
#define rep(i,a,n) for(int i = a;i <= n;i++)
#define per(i,n,a) for(int i = n;i >= a;i--)
#define enter putchar('\n')
#define pr pair<int,int>
#define mp make_pair
#define fi first
#define sc second
using namespace std;
typedef long long ll;
const int M = 200005;
const int N = 1000005;
const int INF = 1000000009;ll read()
{ll ans = 0,op = 1;char ch = getchar();while(ch < '0' || ch > '9'){if(ch == '-') op = -1;ch = getchar();}while(ch >='0' && ch <= '9'){ans *= 10;ans += ch - '0';ch = getchar();}return ans * op;
}struct node
{int lson,rson;ll sum,v;
}t[N<<4];struct opa
{int tim,rk,val;ll num;bool operator < (const opa &g) const{return tim < g.tim;}
}c[M<<1];int n,m,cnt,root[M],idx;
ll g[M],h[M],x,y,z,pre = 1,a,b,C;void modify(int old,int &p,int l,int r,int val,ll num,int op)
{p = ++idx;t[p].lson = t[old].lson,t[p].rson = t[old].rson;t[p].sum = t[old].sum + num,t[p].v = t[old].v + op;if(l == r) return;int mid = (l+r) >> 1;if(val <= mid) modify(t[old].lson,t[p].lson,l,mid,val,num,op);else modify(t[old].rson,t[p].rson,mid+1,r,val,num,op);
}ll query(int p,int l,int r,ll k)
{if(l == r) return t[p].sum / t[p].v * k;int mid = (l+r) >> 1,now = t[t[p].lson].v;if(k < now) return query(t[p].lson,l,mid,k);else if(k == now) return t[t[p].lson].sum;else return t[t[p].lson].sum + query(t[p].rson,mid+1,r,k - now);
}int main()
{m = read(),n = read();rep(i,1,m){x = read(),y = read(),g[i] = read();c[++cnt].tim = x,c[cnt].val = 1,c[cnt].num = g[i];c[++cnt].tim = y+1,c[cnt].val = -1,c[cnt].num = g[i];}sort(g+1,g+1+m),sort(c+1,c+1+cnt);int tot = unique(g+1,g+1+m) - g - 1;int j = 1;rep(i,1,m+1){root[i] = root[i-1];while(c[j].tim == i && j <= cnt){int cur = lower_bound(g+1,g+1+tot,c[j].num) - g;modify(root[i],root[i],1,tot,cur,c[j].num * c[j].val,c[j].val),j++;}}rep(i,1,n){x = read(),a = read(),b = read(),C = read();ll k = 1 + (a * pre % C + b) % C;if(k > t[root[x]].v) pre = t[root[x]].sum;else pre = query(root[x],1,tot,k);printf("%lld\n",pre);}return 0;
}

转载于:https://www.cnblogs.com/captain1/p/10098959.html

CQOI2015 任务查询系统相关推荐

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

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

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

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

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

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

  4. [CQOI2015]任务查询系统

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

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

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

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

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

  7. ●洛谷P3168 [CQOI2015]任务查询系统

    题链: https://www.luogu.org/problemnew/show/P3168 题解: 主席树 强制在线? 那就直接对每一个前缀时间建一个线段树(可持久化线段树),线段树维护优先度权值 ...

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

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

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

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

最新文章

  1. Mysql使用存储过程快速添加百万数据
  2. 前沿技术 | 自动机器学习综述
  3. Java IO流思维导图
  4. js 只准输入数字_js实现文本框只允许输入数字并限制数字大小的方法
  5. 第十三届蓝桥杯青少年STEMA(2021.08-2021.03)C++
  6. 虚拟机机操作系统已禁用 cpu。请关闭或重置虚拟机。_黑科技教学丨Win10竟然内置了一台虚拟机?教你如何玩转它...
  7. 「Python-Django」django 实现将本地图片存入数据库,并能显示在web上
  8. RTMP流媒体播放过程
  9. git相关常用基本用法命令及分支操作指南命令
  10. linux下无法安装VMware的解决方法
  11. 比特大陆招股书讲了个AI的故事,但资本市场愿意听吗?
  12. 2009国内免费网盘横向评测
  13. Allegro删除Out of data shape铜皮框
  14. NYOJ 1132 promise me a medal (判断两线段是否相交)
  15. CorelDRAWX4的VBA插件开发(三十一)使用C++制作动态连接库DLL辅助VBA构键强大功能-(5)在VBA中动态调用DLL文件
  16. Java 全限定类名和非限定类名有何区别
  17. python集成环境pydev如何使用_Eclipse+PyDev环境搭建
  18. 品牌与商家如何做电商直播运营的呢?
  19. linux怎么生成图形,如何在Ubuntu 16.04中创建GIF动态图片
  20. php基础 快速入门文档,快速入门 - Laravel 5.8 中文文档手册 - php中文网手册

热门文章

  1. 原生js自动完成 [转]
  2. java nio设计模式_Java NIO:浅析I/O模型
  3. java程序设计_Java程序设计:学习笔记(4-5)(未完工)
  4. 2018usnews计算机专业排名,2018年研究生计算机专业前50排名(美USNews版)
  5. 描述文件_【iOS】描述文件删除不了?教你一键移除所有恶意描述文件
  6. 上传图片被防火墙拦截_Web安全:文件上传漏洞
  7. mysql查询日期胜负_MySQL面试题:查询每个日期的胜负次数
  8. php数字截取2位小树,数据结构-PHP 二分搜索树的层序遍历(队列实现)
  9. 使用Python,OpenCV进行卡类型及16位卡号数字的OCR
  10. 1024,不讲技术,来一套程序员续命操~