【题解】CQOI2015任务查询系统
主席树,操作上面基本上是一样的。每一个时间节点一棵树,一个树上的每个节点代表一个优先级的节点。把开始和结束时间点离散,在每一棵树上进行修改。注意因为一个时间节点可能会有多个修改,但我们要保证都在同一棵树上,所以我采取了让每个节点额外存储所属于的树的一个信息。当更新到一个节点的时候,如果属于建立好的新树,那么就修改;不属于,则重新建链。
但这题有一个地方需要注意,就是所求的个数有可能小于一个叶子结点中存储的任务个数,这时我们就要返回k * num。
代码(有的地方感觉自己写的有些啰嗦,大家看看就好):
// luogu-judger-enable-o2
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define maxn 1500000
int n, m, timer, tot, cnt, sum, pre = , root[maxn], Ti[maxn];
map <int, int> Map;
bool vis[maxn];
struct node
{
int t, num;
}upd[maxn * ]; struct tree
{
int lson, rson, cal, root, size, rank;
}T[maxn * ]; struct project
{
int s, e, p;
}P[maxn]; bool cmp(project a, project b)
{
return a.p < b.p;
} bool cmp2(node a, node b)
{
return a.t < b.t;
} int read()
{
int x = , k = ;
char c;
c = getchar();
while(c < '' || c > '') { if(c == '-') k = -; c = getchar(); }
while(c >= '' && c <= '') x = x * + c - '', c = getchar();
return x * k;
} void update(int &now, int bf, int x, int num, int l, int r, int root)
{
if(root != T[now].root) now = ++ sum, T[now] = T[bf], T[now].root = root;
if(num > ) T[now].size += ;
else T[now].size -= ;
if(l == r)
{
T[now].cal += num;
T[now].rank = num;
return;
}
int mid = (l + r) >> ;
if(x <= mid) update(T[now].lson, T[bf].lson, x, num, l, mid, root);
else update(T[now].rson, T[bf].rson, x, num, mid + , r, root);
T[now].cal = T[T[now].lson].cal + T[T[now].rson].cal;
} int query(int now, int L, int R, int k)
{
int mid = (L + R) >> ;
int size = T[T[now].lson].size;
if(L == R) return k * T[now].rank;
if(k >= T[now].size) return T[now].cal;
if(k <= size) return query(T[now].lson, L, mid, k);
else return query(T[now].lson, L, mid, size) + query(T[now].rson, mid + , R, k - size);
} signed main()
{
m = read(), n = read();
for(int i = ; i <= m; i ++)
{
P[i].s = read(), P[i].e = read(), P[i].p = read();
upd[++ cnt] = (node) {P[i].s, P[i].p};
upd[++ cnt] = (node) {P[i].e + , -P[i].p};
}
sort(P + , P + + m, cmp);
for(int i = ; i <= m; i ++)
if(P[i].p != P[i - ].p) Map[P[i].p] = ++ tot;
sort(upd + , upd + + cnt, cmp2);
for(int i = ; i <= cnt; i ++)
{
if(upd[i].t != upd[i - ].t)
{
int now = ++ timer; Ti[upd[i].t] = now;
root[timer] = ++ sum;
int t = upd[i].t - ;
while(!Ti[t]) Ti[t] = now - , t --;
}
int t = Ti[upd[i].t];
update(root[t], root[t - ], Map[abs(upd[i].num)], upd[i].num, , tot, t);
vis[t] = true;
}
for(int i = ; i <= n; i ++)
{
int x = read(), a = read(), b = read(), c = read();
int ans, k = + (a * pre + b) % c;
printf("%lld\n", ans = query(root[Ti[x]], , tot, k));
pre = ans;
}
return ;
}
【题解】CQOI2015任务查询系统的更多相关文章
- 题解 [CQOI2015]任务查询系统
题面 解析 首先,我们考虑下暴力的做法: 每次将一个任务的重要度加入到它的区间中, 询问的时候就直接加前\(k\)大. 然而,这样肯会炸的(都说了是暴力了). 其实,我们可以转化一下区间修改(因为区间 ...
- BZOJ3932: [CQOI2015]任务查询系统 主席树
3932: [CQOI2015]任务查询系统 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 4869 Solved: 1652[Submit][St ...
- 主席树||可持久化线段树||离散化||[CQOI2015]任务查询系统||BZOJ 3932||Luogu P3168
题目: [CQOI2015]任务查询系统 题解: 是一道很经典的题目.大体思路是抓优先级来当下标做主席树,用时刻作为主席树的版本.然而优先级范围到1e7去了,就离散化一遍.然后把每个事件的开始(s). ...
- 【BZOJ3932】[CQOI2015]任务查询系统 主席树
[BZOJ3932][CQOI2015]任务查询系统 Description 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si, ...
- BZOJ_3932_[CQOI2015]任务查询系统_主席树
BZOJ_3932_[CQOI2015]任务查询系统_主席树 题意: 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,P ...
- P3168 [CQOI2015]任务查询系统
题目地址:P3168 [CQOI2015]任务查询系统 主席树的模板题 更模板的在这儿:P3834 [模板]可持久化线段树 1(主席树) 形象的说,P3834是"单点修改,区间查询" ...
- bzoj3932 / P3168 [CQOI2015]任务查询系统(主席树+差分)
P3168 [CQOI2015]任务查询系统 看到第k小,就是主席树辣 对于每一段任务(a,b,k),在版本a的主席树+k,版本b+1的主席树-k 同一时间可能有多次修改,所以开个vector存操作, ...
- 2018.06.30 BZOJ 3932: [CQOI2015]任务查询系统(主席树)
3932: [CQOI2015]任务查询系统 Time Limit: 20 Sec Memory Limit: 512 MB Description 最近实验室正在为其管理的超级计算机编制一套任务管理 ...
- [CQOI2015]任务查询系统 主席树
[CQOI2015]任务查询系统 LG传送门 以前还没见过主席树的这种写法. 考虑使用差分的思想处理每一个任务,然后所有的东西就都能顺理成章地用主席树维护了,查询的时候和平时的主席树有一点不同,详见代 ...
- bzoj 3932: [CQOI2015]任务查询系统 -- 主席树 / 暴力
3932: [CQOI2015]任务查询系统 Time Limit: 20 Sec Memory Limit: 512 MB Description 最近实验室正在为其管理的超级计算机编制一套任务管 ...
随机推荐
- (转)IP地址分配原理
网络模型介绍 在计算机网络中有著名的OSI七层协议体系结构,概念清楚,理论完整,但是它既复杂又不实用.TCP/IP体系结构则不同,得到的广泛的应用.最终结合OSI和TCP/IP的优点,采用了一种只有五 ...
- TP5部署服务器问题总结
及最近部署TP5遇到了很多坑,各种环境下都会出现一些问题,下面是我记录的排坑之路 先说最简单的lnmp一键安装包,我用的是1.5稳定版 安装命令:wget http://soft.vpser.net/ ...
- Flask初见
Flask是一个使用 Python 编写的轻量级 Web 应用框架.其 WSIG工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 .Flask使用 BSD 授权. Flask也被称为 “m ...
- 复位自动ID的问题有兩種方法
复位自动ID的问题 有兩種方法: 方法1: truncate table 你的表名 --這樣不但將數據刪除,而且可以重新置位identity屬性的字段. ...
- JS正则表达式笔记
正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串.将匹配的子串替换或者从某个串中取出符合某个条件的子串等. 正则 描述 ...
- 云计算之路-阿里云上:基于Xen的IO模型进一步分析“黑色0.1秒”问题
在发现云服务器读取OCS缓存的“黑色0.1秒”是发生在socket读取数据时,而且是发生在读取开始的字节,甚至在socket写数据时(比如写入缓存key)也会出现超过50ms的情况,我们的好奇心被激发 ...
- Linux-Shell脚本编程-学习-7-总结前面开启后面的学习
国庆前期后国庆回来也都比较忙,把书一放下,在那起来,就难了,发现好多都开始忘记了,今天好不容易硬着头片看来两章,算是马马虎虎的把前面的基础性质的只是看完了吧. 后面讲开始学习Shell编程的高级阶段, ...
- BZOJ1270[BJWC2008]雷涛的小猫
雷涛同学非常的有爱心,在他的宿舍里,养着一只因为受伤被救助的小猫(当然,这样的行为是违反学生宿舍管理条例的).在他的照顾下,小猫很快恢复了健康,并且愈发的活泼可爱了. 可是有一天,雷涛下课回到寝室,却 ...
- Django源码分析之权限系统_擒贼先擒王
乍见 Django内置的权限系统已经很完善了,加上django-guardian提供的功能,基本上能满足大部分的权限需求.暂且不说django-guardian,我们先来看下Django内置的权限系统 ...
- 九度OJ--Q1168
import java.util.Scanner; public class q1168 { public static void main(String[] args) { Scanner scan ...