社区讨论
萌新初学主席树1ms,样例过但是全WA求条
P3168[CQOI2015] 任务查询系统参与者 1已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mm1e7oc2
- 此快照首次捕获于
- 2026/02/25 10:06 2 周前
- 此快照最后确认于
- 2026/02/25 10:26 2 周前
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,cnt,tot,root[200005],mp[100005];
vector<int> v[100005];
struct node{int l,r,val,sum;}a[50000005];
void change(int op1,int op2,int l,int r,int p,int c){
if (l == r){
a[op1].val = a[op2].val + 1;
a[op1].sum = a[op2].sum + l;
return;
}
int mid = (l + r) / 2;
if (!a[op2].l) a[op2].l = ++tot;
if (!a[op2].r) a[op2].r = ++tot;
if (l <= p && p <= mid){
a[op1].r = a[op2].r;
a[op1].l = ++tot;
change(a[op1].l,a[op2].l,l,mid,p,c);
}
else{
a[op1].l = a[op2].l;
a[op1].r = ++tot;
change(a[op1].r,a[op2].r,mid + 1,r,p,c);
}
a[op1].val = a[a[op1].l].val + a[a[op1].r].val;
a[op1].sum = a[a[op1].l].sum + a[a[op1].r].sum;
}
int query(int op,int l,int r,int k){
if (l == r) return a[op].sum;
int mid = (l + r) / 2,ck = a[a[op].l].val;
return k <= ck ? query(a[op].l,l,mid,k) : a[a[op].l].sum + query(a[op].r,mid + 1,r,k - ck);
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin >> m >> n;
for (int i = 1,l,r,x; i <= m; i++){
cin >> l >> r >> x;
v[l].push_back(x);
v[r + 1].push_back(-x);
}
root[cnt] = ++tot;
for (int i = 0; i <= n; i++){
for (int j = 0; j < v[i].size(); j++){
root[++cnt] = ++tot;
change(root[cnt],root[cnt - 1],1,1e7,v[i][j],(v[i][j] > 0 ? 1 : -1));
}
mp[i] = root[cnt];
}
for (int x,a,b,c,ans = 1; n--; ){
cin >> x >> a >> b >> c;
int k = 1 + (a * ans + b) % c;
ans = query(mp[x],1,1e7,k);
cout << ans << '\n';
}
return 0;
}
自己写的哦,不知道对不对,如果不对可以证伪吗QwQ?
回复
共 1 条回复,欢迎继续交流。
正在加载回复...