●洛谷P3168 [CQOI2015]任务查询系统】的更多相关文章

P3168 [CQOI2015]任务查询系统 题目描述 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分. 超级计算机中的任务用三元组\((S_i,E_i,P_i)\)描述,\((S_i,E_i,P_i)\)表示任务从第\(S_i\)秒开始,在第\(E_i\)秒后结束(第\(S_i\)秒和\(E_i\)秒任务也在运行),其优先级为\(P_i\).同一时间可能有多个任务同时执行,它们的优先级可能相同,也可能不同. 调度系统会经常向查询系统询问,第\(X_i\)秒…
题目传送门 任务查询系统 题目描述 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第Ei秒后结束(第Si秒和Ei秒任务也在运行),其优先级为Pi.同一时间可能有多个任务同时执行,它们的优先级可能相同,也可能不同.调度系统会经常向查询系统询问,第Xi秒正在运行的任务中,优先级最小的Ki个任务(即将任务按照优先级从小到大排序后取前Ki个)的优先级之和是多少.特别的…
题链: https://www.luogu.org/problemnew/show/P3168题解: 主席树 强制在线? 那就直接对每一个前缀时间建一个线段树(可持久化线段树),线段树维护优先度权值. 代码: #include<bits/stdc++.h> #define MAXN 100005 using namespace std; int tmp[MAXN]; int N,M,tnt; long long pre=1; struct Event{ int ent; int p[MAXN*…
#include<cstdio> #include<cstdlib> #include<algorithm> #include<cstring> #include<vector> #define MAXN 100000+10 #define Nd Node* #define pii pair<int,int> #define mp make_pair #define ft first #define sc second #define…
题目地址:P3168 [CQOI2015]任务查询系统 主席树的模板题 更模板的在这儿:P3834 [模板]可持久化线段树 1(主席树) 形象的说,P3834是"单点修改,区间查询",P3168是"区间修改,单点查询" 注意!这里只是形象的说,实际上两道题都是静态的 我们联想其他的"区间修改,单点查询"问题,我们都是怎么做的? 差分! 没错,差分,将"区间修改"改成"左端点加,右端点的右边减"的"…
P3168 [CQOI2015]任务查询系统 看到第k小,就是主席树辣 对于每一段任务(a,b,k),在版本a的主席树+k,版本b+1的主席树-k 同一时间可能有多次修改,所以开个vector存操作,再开个数组ti[p]保存时间点p最终的版本号 注意long long #include<iostream> #include<cstdio> #include<cstring> #include<vector> using namespace std; type…
正解:主席树 解题报告: 传送门! 首先考虑如果是单点修改,那就是个线段树板子嘛$QwQ$ 然后现在是区间修改,对于区间修改,显然就考虑差分下,就变成单点修改辣$QwQ$ 同时单点查询前$k$小也就变成了区间查询前$k$小 于是就主席树套下就好$QwQ$ 详细点儿说下趴$QwQ$.先考虑如果查询的不是前$k$小,而是问这个点的$\sum p$,怎么做$QwQ$? 就考虑先转化成单点修改,然后区间查询算出$[1,x]$的所有数之和就成$QwQ$ 然后现在问前$k$小?于是就查询前$k$个数的和就成…
题目描述 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第Ei秒后结束(第Si秒和Ei秒任务也在运行),其优先级为Pi.同一时间可能有多个任务同时执行,它们的优先级可能相同,也可能不同.调度系统会经常向查询系统询问,第Xi秒正在运行的任务中,优先级最小的Ki个任务(即将任务按照优先级从小到大排序后取前Ki个)的优先级之和是多少.特别的,如果Ki大于第Xi秒正在…
题目链接 \(Click\) \(Here\) 差分主席树,就是把主席树做成一个差分前缀和的形式,还是很容易想到的. 写主席树的时候几个注意点: 查询可能开始于所有任务之前,二分任务点要把左边界设置为\(0\) 记得开\(longlong\) 主席树通用细节:查询结束后的边界可能有残余答案未统计.即一个权值里的数,选了太多,不选太少,二分后要手动选上漏掉的部分. #include <bits/stdc++.h> using namespace std; const int N = 200010…
恕我才学浅薄,一开始想到的是树状数组+线段树,然后看了题解才第一次见到了差分这种神奇的科技 仔细想想,主席树的本质不就是前缀和嘛,加上一个差分也是可以的,没想到真是罪过罪过 对时间维护一个差分 在Si处+Ki,在Ti+1处-Ki 用主席树维护插入的数即可 不是很复杂就是代码写了好长时间而且越debug越像题解 注意查前k大的时候比较这样写 if(lch<kth) //向右 else //向左 不能这样 if(lch<=kth) //向右 else //向左 因为这样在lch与kth相等的情况下…