洛谷P3168 任务查询系统
题意:有n个任务,第i个的存在时间是li~ri,有个权值。求t时刻第k大的权值。
这毒瘤...本来是前缀和 -> 主席树,我是树套树...然后光荣TLE。
其实很裸。一开始我写的是每个位置维护一个权值线段树。因为要片改点查,就用差分 + 树状数组搞定了。然后超时...
仔细思考,发现不带修可以直接用主席树。
把差分数组插入进去就行了,查询就是前缀和。这么一看好像主席树就是同时对多个数组做前缀和,每个数组就是线段树的一个位置。
我没用标记永久化,标记下传的时候直接新建的节点。
#include <cstdio>
#include <algorithm>
#include <vector> typedef long long LL;
const int N = , lm = 1e7, M = ; int n, m, tot, rt[N];
int sum[M], ls[M], rs[M];
LL Val[M];
std::vector<int> d[N]; void insert(int x, int &y, int p, int v, int l, int r) {
if(!y || x == y) {
y = ++tot;
sum[y] = sum[x];
Val[y] = Val[x];
}
if(l == r) {
sum[y] += v;
Val[y] += v * r;
return;
}
if(!ls[y]) {
ls[y] = ls[x];
}
if(!rs[y]) {
rs[y] = rs[x];
}
int mid = (l + r) >> ;
if(p <= mid) {
insert(ls[x], ls[y], p, v, l, mid);
}
else {
insert(rs[x], rs[y], p, v, mid + , r);
}
sum[y] = sum[ls[y]] + sum[rs[y]];
Val[y] = Val[ls[y]] + Val[rs[y]];
return;
} LL ask(int k, int l, int r, int o) {
if(!o) {
return ;
}
if(l == r) {
return 1ll * std::min(k, sum[o]) * r;
}
int mid = (l + r) >> ;
if(k <= sum[ls[o]]) {
return ask(k, l, mid, ls[o]);
}
else {
return Val[ls[o]] + ask(k - sum[ls[o]], mid + , r, rs[o]);
}
} int main() {
scanf("%d%d", &n, &m);
for(int i = , x, y, z; i <= n; i++) {
scanf("%d%d%d", &x, &y, &z);
d[x].push_back(z);
d[y + ].push_back(-z);
} // prework
for(int i = ; i <= m; i++) {
if(!d[i].size()) {
rt[i] = rt[i - ];
continue;
}
for(int j = ; j < d[i].size(); j++) {
// d[i][j]
if(d[i][j] > ) {
insert(rt[i - ], rt[i], d[i][j], , , lm);
}
else {
insert(rt[i - ], rt[i], -d[i][j], -, , lm);
}
}
} LL lastans = ;
for(int i = , t, y, z, w; i <= m; i++) {
scanf("%d%d%d%d", &t, &y, &z, &w);
lastans %= w;
y %= w;
int k = (lastans * y + z) % w + ;
lastans = ask(k, , lm, rt[t]);
printf("%lld\n", lastans);
} return ;
}
AC代码
洛谷P3168 任务查询系统的更多相关文章
- 洛谷 P5020 货币系统
题目描述 在网友的国度中共有$ n $种不同面额的货币,第 i种货币的面额为 \(a[i]\),你可以假设每一种货币都有无穷多张.为了方便,我们把货币种数为\(n\).面额数组为 \(a[1..n]\ ...
- 洛谷P3168 [CQOI2015]任务查询系统 [主席树,差分]
题目传送门 任务查询系统 题目描述 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任 ...
- 洛谷 P3168 [CQOI2015]任务查询系统 解题报告
P3168 [CQOI2015]任务查询系统 题目描述 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分. 超级计算机中的任务用三元组\((S_i,E_i,P_i) ...
- ●洛谷P3168 [CQOI2015]任务查询系统
题链: https://www.luogu.org/problemnew/show/P3168题解: 主席树 强制在线? 那就直接对每一个前缀时间建一个线段树(可持久化线段树),线段树维护优先度权值. ...
- AC日记——任务查询系统 洛谷 P3168
题目描述 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第Ei ...
- 洛谷P3168 [CQOI2015]任务查询系统
#include<cstdio> #include<cstdlib> #include<algorithm> #include<cstring> #in ...
- 【洛谷 P3168】 [CQOI2015]任务查询系统(主席树)
题目链接 被自己的sb错误调到自闭.. 主席树的进阶应用. 把\(P_i\)离散化一下,得到每个\(P_i\)的排名,然后建一棵维护\(m\)个位置的主席树,每个结点记录区间总和和正在进行的任务数. ...
- 洛谷P1474 货币系统 Money Systems
P1474 货币系统 Money Systems 250通过 553提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交 讨论 题解 最新讨论 暂时没有讨论 题目描述 母牛们不但创 ...
- 洛谷 P1474 货币系统 Money Systems(经典)【完全背包】+【恰好装满的最大方案数量】
题目链接:https://www.luogu.org/problemnew/show/P1474 题目描述 母牛们不但创建了它们自己的政府而且选择了建立了自己的货币系统.由于它们特殊的思考方式,它们对 ...
随机推荐
- hadoop分布式系统架构详解
hadoop 简单来说就是用 java写的分布式 ,处理大数据的框架,主要思想是 “分组合并” 思想. 分组:比如 有一个大型数据,那么他就会将这个数据按照算法分成多份,每份存储在 从属主机上,并且在 ...
- Linux基础学习(12)--Linux服务管理
第十二章——Linux服务管理 一.服务简介与分类 1.服务的分类: 注:独立的服务放在内存中(好处:响应的速率快,坏处:独立的服务越多,耗费的内存资源越多):xinetd服务本身是独立的,在内存中, ...
- Python——Flask框架——程序的基本结构
一.安装 pip install flask 二.初始化 from flask import Flask app = Flash(__name__) 三.路由:处理URL和函数之间的关系的程序称为路由 ...
- ES6字符串操作
讨论字符串操作之前,我们先来了解一下Unicode 编码的由来,因为Js中的字符串就是一系列Unicode码的集合. 我们都知道,世界上存在着各种各样的语言,汉语,英语,日语等,相对应的,也就存在各种 ...
- Python测试Post请求
原有: #coding:utf-8 import requests def request(title, content): datas = {"title":title,&quo ...
- BZOJ2040[2009国家集训队]拯救Protoss的故乡——模拟费用流+线段树+树链剖分
题目描述 在星历2012年,星灵英雄Zeratul预测到他所在的Aiur行星在M天后会发生持续性暴雨灾害,尤其是他们的首都.而Zeratul作为星灵族的英雄,当然是要尽自己最大的努力帮助星灵族渡过这场 ...
- [HAOI2007] 修筑绿化带
类型:单调队列 传送门:>Here< 题意:给出一个$M*N$的矩阵,每一个代表这一格土地的肥沃程度.现在要求修建一个$C*D$的矩形花坛,矩形绿化带的面积为$A*B$,要求花坛被包裹在绿 ...
- 用随机投掷飞镖法计算Pi值(Randomness Throwing dart Pi Python)
画一个边长为r的正方形和半径为r的四分之一的圆(如下图所示),向上面随机投掷飞镖,通过计算落在星星区域和整体区域的飞镖比例,即可求出π值. 公式推导如下: 假设正方形的边长r为1,那么飞镖落在星星区域 ...
- 【BZOJ3379】【USACO2004】交作业 区间DP
题目描述 数轴上有\(n\)个点,你要从位置\(0\)去位置\(B\),你每秒钟可以移动\(1\)单位.还有\(m\)个限制,每个限制\((x,y)\)表示你要在第\(t\)秒之后(可以是第\(t\) ...
- bzoj 2957 楼房重建 (线段树+思路)
链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2957 思路: 用分块可以很简单的过掉,但是这道题也可以用线段树写. 分类讨论左区间最大值对 ...