求助 WA#2
查看原帖
求助 WA#2
1259718
JCY__楼主2024/10/10 11:01
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e5+5;
int n,q,h[N];
int T,b[N],s[10005][10005];
int ans;
vector<int>v[N];
int K(int x){
	return (x-1)/T+1;
}
int L(int x){
	return (x-1)*T+1;
}
int R(int x){
	return min(x*T,n);
}
void update(int x){
	int cnt=0;
	for(int i=L(x);i<=R(x);i++){
		v[x].push_back(h[i]);
	}
	sort(v[x].begin(),v[x].end());
	for(auto it:v[x]){
		s[x][++cnt]=s[x][cnt-1]+it;
	}
}
int ANS(int l,int r,int c){
	int kl=K(l),kr=K(r),ans=0;
	if(kl==kr){
		for(int i=l;i<=r;i++){
			if(h[i]<=c) ans+=h[i];
		}
		return ans;
	}
	else{
		for(int i=kl+1;i<kr;i++){
			int z=upper_bound(v[i].begin(),v[i].end(),c)-v[i].begin();
			ans+=s[i][z];
		}
		for(int i=l;i<=R(kl);i++){
			if(h[i]<=c) ans+=h[i];
		}
		for(int i=L(kr);i<=r;i++){
			if(h[i]<=c) ans+=h[i];
		}
		return ans;
	}
}
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>n;
	T=sqrt(n);
	for(int i=1;i<=n;i++){
		cin>>h[i];
	}
	for(int i=1;i<=K(n);i++){
		update(i);
	}
	cin>>q;
	while(q--){
		int l,r,x;
		cin>>l>>r>>x;
		l^=ans,r^=ans,x^=ans;
		ans=ANS(l,r,x);
		cout<<ans<<"\n";
	}
	return 0;
}
2024/10/10 11:01
加载中...