标签:lc read 查询 int 任务 num rg CQOI2015
「CQOI2015」任务查询系统
传送门
好像也是板子题???
区间修改,单点查询,考虑差分。
然后每次查询时就直接在对应的主席树上二分即可。
参考代码:
#include <cstdio>
#include <vector>
#define rg register
#define file(x) freopen(x".in", "r", stdin), freopen(x".out", "w", stdout)
using namespace std;
template < class T > inline void read(T& s) {
s = 0; int f = 0; char c = getchar();
while ('0' > c || c > '9') f |= c == '-', c = getchar();
while ('0' <= c && c <= '9') s = s * 10 + c - 48, c = getchar();
s = f ? -s : s;
}
typedef long long LL;
const int _ = 100010;
vector < int > vec1[_], vec2[_];
struct node { int lc, rc, cnt; LL sum; } t[_ << 6];
int n, m, tot, len, rt[_];
inline void update(int& p, int x, int k, int l = 1, int r = len) {
t[++tot] = t[p], t[tot].sum = t[p].sum + 1ll * x * k, t[tot].cnt = t[p].cnt + k, p = tot;
if (l == r) return ;
int mid = (l + r) >> 1;
if (x <= mid) update(t[p].lc, x, k, l, mid);
else update(t[p].rc, x, k, mid + 1, r);
}
inline LL query(int p, int k, int l = 1, int r = len) {
if (l == r) return min(t[p].sum, 1ll * k * l);
int mid = (l + r) >> 1, num = t[t[p].lc].cnt;
if (num >= k) return query(t[p].lc, k, l, mid);
else return query(t[p].rc, k - num, mid + 1, r) + t[t[p].lc].sum;
}
int main() {
#ifndef ONLINE_JUDGE
file("cpp");
#endif
read(m), read(n);
for (rg int s, e, p; m--; )
read(s), read(e), read(p), len = max(len, p), vec1[s].push_back(p), vec2[e + 1].push_back(p);
for (rg int i = 1; i <= n; ++i) {
rt[i] = rt[i - 1];
for (rg int j = 0; j < vec1[i].size(); ++j) update(rt[i], vec1[i][j], 1);
for (rg int j = 0; j < vec2[i].size(); ++j) update(rt[i], vec2[i][j], -1);
}
LL ans = 1;
for (rg int x, a, b, c, k, i = 1; i <= n; ++i) {
read(x), read(a), read(b), read(c);
k = (1ll * a * ans + b) % c + 1;
printf("%lld\n", ans = query(rt[x], k));
}
return 0;
}
标签:lc,read,查询,int,任务,num,rg,CQOI2015 来源: https://www.cnblogs.com/zsbzsb/p/12232081.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。