3932: [CQOI2015]任务查询系统 Time Limit: 20 Sec Memory Limit: 512 MB Submit: 3412 Solved: 1098 [Submit]
来源:互联网 发布:如何提升淘宝店铺销量 编辑:程序博客网 时间:2024/06/05 05:54
3932: [CQOI2015]任务查询系统
Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 3412 Solved: 1098
[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
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
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的一个排列
这道laji题,对拍对了我20h。
然后...........数组开小了。(我能怎么办,我也很绝望啊!)
题解:
以时间为下标,优先级为区间建主席树。
对于s1,e1,p1,
我们可以在s1时加上p1,e1+1时减去p1
维护区间和以及个数就好了。
#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>using namespace std;#define ll long longconst ll N=8000001;const ll M=300010;struct node{ll l,r,l1,r1,x;ll s;}tr[N];ll tot=0,root[N];ll m,n;struct node1{ll s,p,x,k;}sa[M];struct node2{ll s,e,p,x;}a[M];bool cmp(node2 x,node2 y){return x.p<y.p;}void built(ll l,ll r){tot++;ll now=tot;tr[now].l=l;tr[now].r=r;if(l!=r){ll mid=(l+r)>>1;tr[now].l1=tot+1;built(l,mid);tr[now].r1=tot+1;built(mid+1,r);}}inline ll ins(ll rt,ll l,ll r,ll p,ll x){if(rt==0) return 0;if(l<=tr[rt].l&&tr[rt].r<=r){tot++;tr[tot].l=l;tr[tot].r=r;tr[tot].s=tr[rt].s+p*x;tr[tot].x=tr[rt].x+x;return tot;}else{//prllf("!");tot++; ll pp=tot; tr[pp].l=tr[rt].l; tr[pp].r=tr[rt].r; ll mid=(tr[rt].l+tr[rt].r)/2; if(l<=mid) { tr[pp].l1=ins(tr[rt].l1,l,r,p,x); tr[pp].r1=tr[rt].r1; } if(r>mid) { tr[pp].l1=tr[rt].l1; tr[pp].r1=ins(tr[rt].r1,l,r,p,x); } tr[pp].s=tr[tr[pp].l1].s+tr[tr[pp].r1].s; tr[pp].x=tr[tr[pp].l1].x+tr[tr[pp].r1].x; return pp; }}long long f[100001],fx[100001]; ll getans(ll rt,ll k){ if(tr[rt].l==tr[rt].r) { return f[tr[rt].l]*k; } if(tr[rt].x<=k) return tr[rt].s; if(tr[tr[rt].l1].x<k) return tr[tr[rt].l1].s+getans(tr[rt].r1,k-tr[tr[rt].l1].x); return getans(tr[rt].l1,k);}bool cmp2(node1 x,node1 y){ return x.s<y.s;}int main(){scanf("%lld%lld",&m,&n);ll s1,e1,p1;for(ll i=1;i<=m;i++){scanf("%lld%lld%lld",&a[i].s,&a[i].e,&a[i].p);a[i].x=i;}sort(a+1,a+1+m,cmp);ll p=0; p++; f[p]=a[1].p; fx[a[1].x]=p; for(ll i=2;i<=m;i++) { if(a[i].p!=a[i-1].p) { p++; f[p]=a[i].p; } fx[a[i].x]=p; } ll tx=0;for(ll i=1;i<=m;i++){tx++;sa[tx].s=a[i].s;sa[tx].p=a[i].p;sa[tx].x=1;sa[tx].k=fx[a[i].x]; tx++;sa[tx].s=a[i].e+1;sa[tx].p=a[i].p;sa[tx].x=-1;sa[tx].k=fx[a[i].x]; }sort(sa+1,sa+1+tx,cmp2);root[0]=tot+1;built(1,p);ll lar=root[0];for(ll i=1;i<=tx;i++){ll tp=tot+1;ll yu=ins(lar,sa[i].k,sa[i].k,sa[i].p,sa[i].x);root[sa[i].s]=tp;lar=tp;}for(int i=1;i<=sa[tx].s;i++) if(root[i]==0) root[i]=root[i-1]; ll x1,a1,b1,c1,k1;long long pre=1;for(ll i=1;i<=n;i++){scanf("%lld%lld%lld%lld",&x1,&a1,&b1,&c1);k1=1+(a1*pre+b1)%c1;pre=getans(root[x1],k1);printf("%lld\n",pre);}}
阅读全文
0 0
- 3932: [CQOI2015]任务查询系统 Time Limit: 20 Sec Memory Limit: 512 MB Submit: 3412 Solved: 1098 [Submit]
- Problem D: C++习题-快速排序 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 395 Solved: 169 [Submit][Stat
- 1662: [Usaco2006 Nov]Round Numbers 圆环数 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 337 Solved:
- Problem F: Matrix Problem (III) : Array Practice Time Limit: 1 Sec Memory Limit: 4 MB Submit: 8787
- Problem E: Matrix Problem (II) : Array Practice Time Limit: 1 Sec Memory Limit: 4 MB Submit: 8980
- 【基础试题】蛇形矩阵 Time Limit:1000MS Memory Limit:65536K Total Submit:252 Accepted:118 Description 蛇形矩
- 【模拟试题】进制转换(normal) Time Limit:1000MS Memory Limit:65536K Total Submit:451 Accepted:203 Descriptio
- 【基础试题】约瑟夫环问题 Time Limit:1000MS Memory Limit:65536K Total Submit:426 Accepted:283 Description 有
- 【基础试题】排序(初级) Time Limit:1000MS Memory Limit:65536K Total Submit:1510 Accepted:672 Description
- 【基础试题】百钱买百鸡 Time Limit:1000MS Memory Limit:65536K Total Submit:1501 Accepted:441 Description 一
- 【基础试题】输出如下图形 Time Limit:1000MS Memory Limit:65536K Total Submit:604 Accepted:384 Description 输
- 【基础试题】faibonacci数列 Time Limit:1000MS Memory Limit:65536K Total Submit:1708 Accepted:453 Descripti
- 【基础试题】验证哥德巴赫猜想 Time Limit:1000MS Memory Limit:65536K Total Submit:566 Accepted:267 Description
- 【基础试题】数组元素的操作 Time Limit:1000MS Memory Limit:65536K Total Submit:441 Accepted:225 Description
- 【基础试题】兔子繁殖问题 Time Limit:1000MS Memory Limit:65536K Total Submit:674 Accepted:263 Description 有
- 1-1 欢迎来的C++世界 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 通
- 【基础试题】回文数弱版 Time Limit:10000MS Memory Limit:65536K Total Submit:271 Accepted:87 Case Time Limit:1
- 【基础试题】矩阵问题 Time Limit:10000MS Memory Limit:65536K Total Submit:401 Accepted:267 Case Time Limit:1
- C# 分页 aspnetpager
- 地理信息系统矢量数据的组织形式 第二章:数字表面模型
- canvas学习总结四:绘制虚线
- 增加MAVLink协议 自定义消息.md
- Android Studio使用小技巧:提取方法代码片段
- 3932: [CQOI2015]任务查询系统 Time Limit: 20 Sec Memory Limit: 512 MB Submit: 3412 Solved: 1098 [Submit]
- iOS 使用全能的初始化方法
- 计算机导论第二课笔记一
- 浅谈SAP CRM开发——技术概念、与ECC 系列产品区别
- bzoj 4383: [POI2015]Pustynia(线段树优化建图+拓扑序)
- 图像处理中,outlier和inlier分别指什么?
- linux固定IP地址
- windows中hid操作api介绍
- go通过代理访问百度地图api实现GPS角坐标转换