刚学主席树过样例 WA0pts 玄3关求调
查看原帖
刚学主席树过样例 WA0pts 玄3关求调
755789
Misty_Post楼主2025/8/5 16:16

感激不尽

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ls tr[now].lso
#define rs tr[now].rso
struct nood{
	ll z,lso,rso,siz,sum,cd;
}tr[16000000];
ll n,m,cnt,L,R,K,a[20000000],rt[20000000],tot,anss=0;
ll b[20000000],q;
vector<ll>Q[2000000],H[2000000];
ll bui(ll l,ll r,ll &now){
	now=++cnt;tr[now].cd=tr[now].sum=0;
	if(l==r){
		return now;
	}
	ll mid=(l+r)>>1;
	tr[now].lso=bui(l,mid,ls);
	tr[now].rso=bui(mid+1,r,rs);
	return now;
}
ll update(ll &now,ll lst,ll l,ll r,ll pos,ll val,ll z){
	//当前节点 now,上一个版本对应节点 lst,左端点 l,右端点 r,修改的位置 pos 和修改的值 val
	now=++cnt;
	tr[now]=tr[lst];
	tr[now].cd+=val;
	tr[now].sum+=z;
	if(l==r){
		return now;
	}
	ll mid=(l+r)>>1;
	if(pos<=mid){
		tr[now].lso=update(ls,tr[lst].lso,l,mid,pos,val,z);
	}
	else{
		tr[now].rso=update(rs,tr[lst].rso,mid+1,r,pos,val,z);
	}
	return now;
}
void que(ll now,ll l,ll r,ll pos){
	ll mid=(l+r)>>1;
	if(l==r){
		anss+=tr[now].sum;
		return;
	}
	if(tr[ls].cd>pos){
		que(ls,l,mid,pos);
	}
	else if(tr[ls].cd==pos){
		anss=tr[ls].sum;
		return;
	}
	else{
		anss+=tr[ls].sum;
		que(rs,mid+1,r,pos-tr[ls].cd);
	}
}
int main(){
//	freopen("P3168_1.in","r",stdin);
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	cin>>m>>n;
	ll s,e,p;
	for(int i=1;i<=m;i++){
		cin>>s>>e>>p;
		Q[s].push_back(i);
		H[e+1].push_back(i);
		a[i]=p;b[i]=a[i];
	}
	sort(b+1,b+m+1);
	ll q=unique(b+1,b+m+1)-b-1;
	bui(1,q,rt[0]);
	for(int i=1;i<=n;i++){
		rt[i]=rt[i-1];
		ll len=Q[i].size();
		for(int j=0;j<len;j++){
			ll lss=lower_bound(b+1,b+1+q,a[Q[i][j]])-b;
			update(rt[i],rt[i],1,q,lss,1,a[Q[i][j]]);
		}
		len=H[i].size();
		for(int j=0;j<len;j++){
			ll lss=lower_bound(b+1,b+1+q,a[H[i][j]])-b;
			update(rt[i],rt[i],1,q,lss,-1,-a[H[i][j]]);
		}
	}
	ll xx,aa,bb,cc,pre=1,kk;
	for(int i=1;i<=n;i++){
		cin>>xx>>aa>>bb>>cc;
		kk=1+(aa*pre+bb)%cc;
		if(tr[rt[xx]].cd<=kk){
			anss=tr[rt[xx]].sum;
			cout<<tr[rt[xx]].sum<<"\n";
		}
		else{
			anss=0;
			que(rt[xx],1,q,kk);
			cout<<anss<<"\n";
		}
		pre=anss;
	}
} 

2025/8/5 16:16
加载中...