rt,样例过了
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e6+5;
int a[N];
int L[N], R[N], pos[N], n, m, t, tag[N];
vector<int> num[N];
void resort(int x)
{
num[x].clear();
for(int i=L[x];i<=R[x];i++)
{
num[x].push_back(a[i]);
}
sort(num[x].begin(), num[x].end());
}
int sum[N];
int query(int lt, int rt, int val)
{
int ans=0, x=pos[lt], y=pos[rt];
if(x==y)
{
for(int i=lt;i<=rt;i++)
{
ans+=(a[i]+tag[x]<=val);
}
}
else
{
for(int i=lt;i<=R[x];i++)
{
// ans+=(a[i]+tag[x]<=val);
if(a[i]+tag[x]<=val)
{
ans+=a[i]+tag[x];
}
}
for(int i=L[y];i<=rt;i++)
{
if(a[i]+tag[y]<=val)ans+=a[i]+tag[y];
}
for(int i=x+1;i<y;i++)
{
int tmp=val-tag[i];
ans+=sum[upper_bound(num[i].begin(),num[i].end(),tmp)-num[i].begin()];
}
}
return ans;
}
int lst;
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
int n;
cin>>m;
for(int i=1;i<=m;i++)
{
cin>>a[i];
sum[i]=sum[i-1]+a[i];
}
cin>>n;
t=sqrt(m);
for(int i=1;i<=t;i++)
{
L[i]=(i-1)*t+1;
R[i]=i*t;
}
if(R[t]<m)
{
t++;
L[t]=R[t-1]+1;
R[t]=m;
}
for(int i=1;i<=t;i++)
{
for(int j=L[i];j<=R[i];j++)
{
pos[j]=i;
num[i].push_back(a[j]);
}
}
for(int i=1;i<=t;i++)
{
sort(num[i].begin(),num[i].end());
}
for(int i=1;i<=n;i++)
{
int x, y, c;
cin>>x>>y>>c;
x^=lst,y^=lst,c^=lst;
int tmp=query(x,y,c);
cout<<tmp<<"\n";
lst=tmp;
// for(int j=1;j<=t;j++)
// {
// resort(j);
// }
}
}