3932: [CQOI2015]任务查询系统

Time Limit: 20 Sec  Memory Limit: 512 MB
Submit: 4113  Solved: 1334
[Submit][Status][Discuss]

Description

最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分。超级计算机中的
任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第Ei秒后结束(第Si秒和Ei秒任务也在运行
),其优先级为Pi。同一时间可能有多个任务同时执行,它们的优先级可能相同,也可能不同。调度系统会经常向
查询系统询问,第Xi秒正在运行的任务中,优先级最小的Ki个任务(即将任务按照优先级从小到大排序后取前Ki个
)的优先级之和是多少。特别的,如果Ki大于第Xi秒正在运行的任务总数,则直接回答第Xi秒正在运行的任务优先
级之和。上述所有参数均为整数,时间的范围在1到n之间(包含1和n)。

Input

输入文件第一行包含两个空格分开的正整数m和n,分别表示任务总数和时间范围。接下来m行,每行包含三个空格
分开的正整数Si、Ei和Pi(Si≤Ei),描述一个任务。接下来n行,每行包含四个空格分开的整数Xi、Ai、Bi和Ci,
描述一次查询。查询的参数Ki需要由公式 Ki=1+(Ai*Pre+Bi) mod Ci计算得到。其中Pre表示上一次查询的结果,
对于第一次查询,Pre=1。

Output

输出共n行,每行一个整数,表示查询结果。

Sample Input

4 3
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

2
8
11

HINT

样例解释
K1 = (1*1+3)%2+1 = 1
K2 = (1*2+3)%4+1 = 2
K3 = (2*8+4)%3+1 = 3
对于100%的数据,1≤m,n,Si,Ei,Ci≤100000,0≤Ai,Bi≤100000,1≤Pi≤10000000,Xi为1到n的一个排列

分析:主席树的第一题......发现自己理解地不是很深.
          若对于每一个时间建主席树的话,第i棵可以用来维护时间为1~i的优先级在[x,y]的任务个数和优先级之和.对于每一个时间点都建主席树则会有点浪费,因为每次更改操作只会设计到2个时间点.考虑用操作来建主席树.第i棵可以维护第1~i次操作后优先级在[x,y]的任务个数和优先级之和.那么每一次操作只需要在初始时间和结束时间+1处更改就行了(类似于差分).对操作的时间排序,接着求出每个时间点最后被影响的操作序号.最后查询就好了.
          搞清楚主席树表示的意义很重要!碰到第k小/大这种字眼也要很快反应过来该用什么方法,还要知道利用主席树要维护什么东西!与权值线段树联系起来思考.
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>using namespace std;const int maxn = 200010;typedef long long ll;ll ans;
int n,m,tot,cur[maxn],cnt,root[maxn],mx;struct node
{int left,right,sizee;ll sum;
}e[maxn * 25];struct node2
{int pos,val;
}a[maxn];bool cmp(node2 a,node2 b)
{return a.pos < b.pos;
}void update(int l,int r,int x,int &y,int v)
{e[y = ++cnt] = e[x];e[y].sizee += (v > 0 ? 1 : -1);e[y].sum += v;if (l == r)return;int mid = (l + r) >> 1;if (abs(v) <= mid)update(l,mid,e[x].left,e[y].left,v);elseupdate(mid + 1,r,e[x].right,e[y].right,v);
}ll query(int l,int r,int x,int k)
{if (e[x].sizee <= k)return e[x].sum;if (l == r)return 1LL * l * k;int mid = (l + r) >> 1;if (k <= e[e[x].left].sizee)return query(l,mid,e[x].left,k);elsereturn e[e[x].left].sum + query(mid + 1,r,e[x].right,k - e[e[x].left].sizee);
}int main()
{scanf("%d%d",&n,&m);for(int i = 1; i <= n; i++){int x,y,z;scanf("%d%d%d",&x,&y,&z);a[++tot].pos = x;a[tot].val = z;a[++tot].pos = y + 1;a[tot].val = -z;mx = max(mx,z);}sort(a + 1,a + 1 + tot,cmp);for (int i = 1; i <= tot; i++)update(1,mx,root[i - 1],root[i],a[i].val);for (int i = tot; i >= 1; i--) //维护每一个被更改的时间点最后在哪里被更改的if (a[i].pos != a[i + 1].pos)cur[a[i].pos] = root[i];for (int i = 1; i <= m; i++) //如果当前时间点没有被更改,那么就和前一个时间点的情况一样if (!cur[i])cur[i] = cur[i - 1];ans = 1;for (int i = 1; i <= m; i++){ll t,x,y,z,k;scanf("%lld%lld%lld%lld",&t,&x,&y,&z);k = (1LL * x * ans + y) % z + 1;ans = query(1,mx,cur[t],k);printf("%lld\n",ans);}return 0;
}

转载于:https://www.cnblogs.com/zbtrs/p/8279942.html

bzoj3932 [CQOI2015]任务查询系统相关推荐

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

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

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

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

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

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

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

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

  5. [CQOI2015]任务查询系统

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

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

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

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

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

  8. CQOI2015 任务查询系统

    传送门 又是一句经常见到的话--做完这题对主席树的理解会更好一些-- 这道题把普通的主席树单点修改区间查询改成了区间修改单点查询.这个的话我们可以改成差分解决--把一个操作改成两个,然后把所有操作按照 ...

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

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

  10. 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. 【建站系列教程】1、前言
  2. 信息安全系统设计基础第九周学习总结
  3. eye caring sticker
  4. hdu 1540(线段树单点更新 区间合并)
  5. Linux命令之 mkfs -- 在特定的分区创建 Linux 文件系统
  6. [html] 如何给input的右上角加个清除的按钮?
  7. 移动端禁止视频自动全屏播放
  8. 目标检测(十)--SSD
  9. a byte of python2微盘_《A Byte of Python》与《简明 Python 教程》PDF版
  10. ipad 模拟 触控板_如何将蓝牙鼠标或触控板连接到iPad
  11. 数据库分页的几种实现
  12. 提升幸福感的100件小事
  13. 移位寄存器——数电第六章学习
  14. “网红直播+电商”是门好生意?直播的商品为什么这么好卖
  15. 【转】网站流量UV是什么意思?什么是流量UV?
  16. 达梦迁移oracle,达梦数据迁移工具的使用
  17. 【解决方案】MacOS遇到“无法打开xxx,因为Apple无法检查其是否包含恶意软件”,怎么处理。
  18. 深度学习玩LOL-游戏助手-概述
  19. 第七章-微分方程习题
  20. 微信小程序——章节自测六

热门文章

  1. [渝粤教育] 中国地质大学 大学英语(3) 复习题
  2. django drf 改变retrive的pk查询字段
  3. sublime设置代码缩进
  4. 【转】无需刻录DMG光盘,教你在VMWare下安装MAC OS X Snow Leopard 10.6
  5. [转]mysql_connect() 不支持 请检查 mysql 模块是否正确加载 解决
  6. 2018年11月26日 练习3
  7. 10.210.3 Xcode开发包
  8. span width无效
  9. 团队项目第一阶段冲刺站立会议05
  10. File Manager所支持的文件