[题目链接]

https://www.lydsy.com/JudgeOnline/problem.php?id=3932

[算法]

首先 , 我们可以将(Si , Ei , Pi)转化为在Si处加入Pi , 在(Ei + 1)出删除Pi

建立可持久化线段树 , 维护每秒出现任务的个数和优先级的和 , 即可

时间复杂度 : O(NlogN)

[代码]

#include<bits/stdc++.h>
using namespace std;
#define MAXN 200010
typedef long long LL; int n , m , idx , version;
int S[MAXN] , E[MAXN] , P[MAXN] , root[MAXN * ] , cnt[MAXN * ] , tmp[MAXN * ] , lson[MAXN * ] , rson[MAXN * ] , rt[MAXN * ];
LL sum[MAXN * ];
multiset< int > ins[MAXN] , del[MAXN]; template <typename T> inline void chkmax(T &x,T y) { x = max(x,y); }
template <typename T> inline void chkmin(T &x,T y) { x = min(x,y); }
template <typename T> inline void read(T &x)
{
T f = ; x = ;
char c = getchar();
for (; !isdigit(c); c = getchar()) if (c == '-') f = -f;
for (; isdigit(c); c = getchar()) x = (x << ) + (x << ) + c - '';
x *= f;
}
inline void build(int &k , int l , int r)
{
k = ++idx;
cnt[k] = sum[k] = ;
if (l == r) return;
int mid = (l + r) >> ;
build(lson[k] , l , mid);
build(rson[k] , mid + , r);
}
inline void modify(int &k , int old , int l , int r , int x , int value)
{
k = ++idx;
lson[k] = lson[old] , rson[k] = rson[old];
cnt[k] = cnt[old] + value;
sum[k] = sum[old] + 1LL * tmp[x] * value;
if (l == r) return;
int mid = (l + r) >> ;
if (mid >= x) modify(lson[k] , lson[k] , l , mid , x , value);
else modify(rson[k] , rson[k] , mid + , r , x , value);
}
inline LL query(int &k , int l , int r , int x)
{
if (l == r) return 1LL * tmp[l] * min(x , cnt[k]);
int mid = (l + r) >> ;
if (cnt[lson[k]] >= x) return query(lson[k] , l , mid , x);
else return sum[lson[k]] + query(rson[k] , mid + , r , x - cnt[lson[k]]);
} int main()
{ read(n); read(m);
for (int i = ; i <= n; i++)
{
read(S[i]);
read(E[i]);
read(P[i]);
tmp[i] = P[i];
}
sort(tmp + , tmp + n + );
int len = unique(tmp + , tmp + n + ) - tmp - ;
for (int i = ; i <= n; i++)
{
P[i] = lower_bound(tmp + , tmp + len + , P[i]) - tmp;
ins[S[i]].insert(P[i]);
del[E[i] + ].insert(P[i]);
}
build(root[version = ] , , len);
for (int i = ; i <= n; i++)
{
for (multiset< int > :: iterator it = ins[i].begin(); it != ins[i].end(); it++)
{
int t = (*it);
modify(root[++version] , root[version] , , n , t , );
}
for (multiset< int > :: iterator it = del[i].begin(); it != del[i].end(); it++)
{
int t = (*it);
modify(root[++version] , root[version] , , n , t , -);
}
rt[i] = version;
}
LL pre = ;
for (int i = ; i <= m; i++)
{
LL xi , ai , bi , ci;
read(xi); read(ai); read(bi); read(ci);
int ki = (1LL * ai * (pre % ci) % ci + bi % ci) % ci + ;
printf("%lld\n" , pre = query(root[rt[xi]] , , n , ki));
} return ; }

最新文章

  1. GMU 简单使用一
  2. MyEclipse 关闭鼠标悬停提示
  3. JAVA Day5
  4. Android 手势识别类 ( 二 ) GestureDetector 源码浅析
  5. C++ Socket编程步骤 【转】
  6. 转__Android开源项目(三 完结篇)
  7. Spring 实践 -IoC
  8. 浅谈模块化的JavaScript
  9. Centos内核升级的三种方法
  10. Step one : 熟悉Unix/Linux Shell 常见命令行 (三)
  11. java对象和json对象之间互相转换
  12. CSS3基础知识
  13. 迪杰斯特拉/dijkstra 算法模板(具体凝视)
  14. TensorFlow4Delphi
  15. Lucene 09 - 什么是Lucene的高亮显示 + Java API实现高亮显示
  16. 网络虚拟化基础一:linux名称空间Namespaces
  17. vuex 状态管理
  18. 使用TortoiseSVN创建版本库
  19. 中文字符串和UTF-8编码字符串相互转换
  20. jmeter接口自动化部署jenkins教程

热门文章

  1. centos7 安装teamviewer 报错libQt5WebKitWidgets.so.5()(64bit)
  2. .net core 使用 codegenerator 创建默认CRUD代码
  3. codeforces 1041 e 构造
  4. jsp/servlet实现简单上传和下载
  5. Proximal Gradient Descent for L1 Regularization(近端梯度下降求解L1正则化问题)
  6. zoj How Many Shortest Path
  7. HTML--比较实用的小例子
  8. 嵌入式程序员应知道的0x10个C语言Tips
  9. Ubuntu下编译Android JNI实例全过程
  10. FLEX接收外部参数 .