Portal

Description

给出\(n(n\leq10^5)\)个任务,和总时间范围\(m(m\leq10^5)\)。每个任务有开始/结束时间\(s_i,e_i(1\leq s_i \leq e_i \leq m)\)和优先级\(p_i(p_i\leq10^9)\)。接下来\(m\)个询问,每次询问在时刻\(t_i\)时优先级前\(k\)大的任务的优先级之和,若\(k\)大于此时正在进行的任务总数则输出此时优先级之和。其中\(\{t_m\}\)是\(1..m\)的一个排列。

Solution

可持久化线段树。

将优先级\(p\)离散化,然后对于每个时刻建立线段树,记录此时正在进行的任务情况,线段树上第\(i\)个位置记录优先级为\(i\)的任务个数。在线段树上同时维护区间任务个数和区间优先级之和即可完成询问。

时间复杂度\(O(nlogn)\)。

Code

//「CQOI2015」任务查询系统
#include <algorithm>
#include <cstdio>
using namespace std;
typedef long long lint;
inline char gc()
{
static char now[1<<16],*s,*t;
if(s==t) {t=(s=now)+fread(now,1,1<<16,stdin); if(s==t) return EOF;}
return *s++;
}
inline int read()
{
int x=0; char ch=gc();
while(ch<'0'||'9'<ch) ch=gc();
while('0'<=ch&&ch<='9') x=x*10+ch-'0',ch=gc();
return x;
}
const int N=2e5+10;
int n,m;
struct optn{int opt,t,x;} seq[N];
bool cmpT(optn a,optn b) {return a.t<b.t;}
int n0,map[N];
void discrete()
{
for(int i=1;i<=n+n;i++) map[i]=seq[i].x;
sort(map+1,map+n+n+1); n0=unique(map+1,map+n+n+1)-map-1;
for(int i=1;i<=n+n;i++) seq[i].x=lower_bound(map+1,map+n0+1,seq[i].x)-map;
}
const int N1=22*N;
int ndCnt,rt[N],ch[N1][2],cnt[N1] ;lint sum[N1];
void update(int p) {cnt[p]=cnt[ch[p][0]]+cnt[ch[p][1]],sum[p]=sum[ch[p][0]]+sum[ch[p][1]];}
void ndCopy(int p,int q) {ch[q][0]=ch[p][0],ch[q][1]=ch[p][1],cnt[q]=cnt[p],sum[q]=sum[p];}
void ins(int &p,int L0,int R0,int x,int v)
{
ndCopy(p,++ndCnt); p=ndCnt;
if(L0==R0) {cnt[p]+=v,sum[p]+=v*map[L0]; return;}
int mid=L0+R0>>1;
if(x<=mid) ins(ch[p][0],L0,mid,x,v);
else ins(ch[p][1],mid+1,R0,x,v);
update(p);
}
lint query(int p,int L0,int R0,int k)
{
if(L0==R0) return 1LL*k*map[L0];
if(cnt[p]<=k) return sum[p];
int mid=L0+R0>>1;
if(cnt[ch[p][0]]>=k) return query(ch[p][0],L0,mid,k);
else return sum[ch[p][0]]+query(ch[p][1],mid+1,R0,k-cnt[ch[p][0]]);
}
int main()
{
n=read(),m=read();
for(int i=1;i<=n;i++)
{
int t1=read(),t2=read(),x=read();
int i2=i<<1,i1=i2-1;
seq[i1].opt=1,seq[i1].t=t1,seq[i1].x=x;
seq[i2].opt=-1,seq[i2].t=t2+1,seq[i2].x=x;
}
discrete();
sort(seq+1,seq+n+n+1,cmpT);
for(int i=1,k=1;i<=1e5+10;i++)
{
rt[i]=rt[i-1];
for(k;seq[k].t==i;k++) ins(rt[i],1,n0,seq[k].x,seq[k].opt);
}
lint pre=1;
for(int i=1;i<=m;i++)
{
int t=read(); lint a=read(),b=read(),c=read();
pre=query(rt[t],1,n0,1+(a*pre+b)%c);
printf("%lld\n",pre);
}
return 0;
}

LibreOJ2097 - 「CQOI2015」任务查询系统的更多相关文章

  1. 「CQOI2015」任务查询系统

    「CQOI2015」任务查询系统 传送门 好像也是板子题??? 区间修改,单点查询,考虑差分. 然后每次查询时就直接在对应的主席树上二分即可. 参考代码: #include <cstdio> ...

  2. LibreOJ2095 - 「CQOI2015」选数

    Portal Description 给出\(n,k,L,R(\leq10^9)\),求从\([L,R]\)中选出\(n\)个可相同有顺序的数使得其gcd为\(k\)的方案数. Solution 记\ ...

  3. 「CQOI2015」选数

    「CQOI2015」选数 题目描述 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都 ...

  4. 【LOJ】#2098. 「CQOI2015」多项式

    题解 令x = x - t代换一下会发现 \(\sum_{i = 0}^{n}a_i (x + t)^i = \sum_{i = 0}^{n} b_{i} x^{i}\) 剩下的就需要写高精度爆算了- ...

  5. Linux 小知识翻译 - 「LDAP」

    这次聊聊「LDAP」. LDAP是「Lightweight Directory Access Protocol」的所有,从名字上可以看出是协议的一种. LDAP是访问数据库(层次型数据库)的组件.管理 ...

  6. BZOJ_3932_[CQOI2015]任务查询系统_主席树

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

  7. BZOJ3932: [CQOI2015]任务查询系统 主席树

    3932: [CQOI2015]任务查询系统 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 4869  Solved: 1652[Submit][St ...

  8. P3168 [CQOI2015]任务查询系统

    题目地址:P3168 [CQOI2015]任务查询系统 主席树的模板题 更模板的在这儿:P3834 [模板]可持久化线段树 1(主席树) 形象的说,P3834是"单点修改,区间查询" ...

  9. 主席树||可持久化线段树||离散化||[CQOI2015]任务查询系统||BZOJ 3932||Luogu P3168

    题目: [CQOI2015]任务查询系统 题解: 是一道很经典的题目.大体思路是抓优先级来当下标做主席树,用时刻作为主席树的版本.然而优先级范围到1e7去了,就离散化一遍.然后把每个事件的开始(s). ...

随机推荐

  1. oracle的clob转换varchar2

    time: 2008/02/29 author: skate oracle的clob转换varchar2 今天在做一个表的数据转移的时候,发现要他通过比较clob字段,但大家都知道clob字段是无法比 ...

  2. 2018.5.4 AndroidStudio遇到的问题

    新建项目初出现异常报错 Error:Execution failed for task ':app:preDebugAndroidTestBuild'. > Conflict 发生这类型的错误, ...

  3. iOS JS 交互之利用系统JSContext实现 JS调用oc方法

    ios js 交互分为两块: 1.oc调用js 这一块实现起来比较简单, 我的项目中加载的是本地的html,js,css,需要注意的是当你向工程中拖入这些文件时,选择如下操作,(拖入的文件夹是蓝色的, ...

  4. 前端MVVM模式及其在Vue和React中的体现

    MVVM相关概念 Mvvm 前端数据流框架精讲 1) MVVM典型特点是有四个概念:Model.View.ViewModel.绑定器.MVVM可以是单向绑定也可以是双向绑定甚至是不绑定 2) 绑定器: ...

  5. CentOS7搭建DNS服务器

    DNS是域名系统(Domain Name System)的缩写,它的作用是将主机名解析成IP(正向解析),从IP地址查询其主机名(反向解析). DNS的工作原理(1)客户机发出查询请求当被询问到有关本 ...

  6. ACM-ICPC 2018 徐州赛区网络预赛 F. Features Track

    262144K   Morgana is learning computer vision, and he likes cats, too. One day he wants to find the ...

  7. MIP启发式算法:Variable fixing heuristic

    *本文主要记录及分享学习到的知识,算不上原创 *参考文章见链接. 本文简单介绍一下Variable fixing heuristic,这个算法同样以local search为核心框架,它的特点在于定义 ...

  8. Linux学习-仅执行一次的工作排程

    atd 的启动与 at 运作的方式 要使用单一工作排程时,我们的 Linux 系统上面必须要有负责这个排程的服务,那就是 atd 这个玩 意儿. 不过并非所有的 Linux distributions ...

  9. luogu1169 [ZJOI2007]棋盘制作

    悬线法 #include <iostream> #include <cstring> #include <cstdio> using namespace std; ...

  10. iOS 9下支持的键盘类型:

    http://blog.csdn.net/cloudox_/article/details/50532124