求调离谱RE
查看原帖
求调离谱RE
848964
hzoi_Shadow楼主2024/7/15 21:27

在 SP3261 RACETIME - Race Against Time 的基础上改的

#include<bits/stdc++.h>
using namespace std;
#define ll long long 
#define ull unsigned long long
#define sort stable_sort 
#define endl '\n'
ll a[200010],b[200010],L[200010],R[200010],pos[200010],sum[200010],klen,ksum;
void init(ll n)
{
    klen=sqrt(n);
    ksum=n/klen;
    for(ll i=1;i<=ksum;i++)
    {
        L[i]=R[i-1]+1;
        R[i]=R[i-1]+klen;
    }
    if(R[ksum]<n)
    {
        ksum++;
        L[ksum]=R[ksum-1]+1;
        R[ksum]=n;
    }
    for(ll i=1;i<=ksum;i++)
    {
        for(ll j=L[i];j<=R[i];j++)
        {
            pos[j]=i;
        }
        sort(b+L[i],b+R[i]+1);
		sum[L[i]]=b[L[i]];
		for(ll j=L[i]+1;j<=R[i];j++)
		{
			sum[j]=sum[j-1]+b[j];
		}
    }
}
ll query(ll l,ll r,ll val)
{
    ll ans=0;
    if(pos[l]==pos[r])
    {
        for(ll i=l;i<=r;i++)
        {
            ans+=(a[i]<=val)*a[i];
        }
    }
    else
    {
        for(ll i=l;i<=R[pos[l]];i++)
        {
            ans+=(a[i]<=val)*a[i];
        }
        for(ll i=pos[l]+1;i<=pos[r]-1;i++)
        {
            ans+=sum[upper_bound(b+L[i],b+R[i]+1,val)-b-1];
        }
        for(ll i=L[pos[r]];i<=r;i++)
        {
            ans+=(a[i]<=val)*a[i];
        }
    }
    return ans;
}
int main()
{
    ll n,q,l,r,val,ans=0,i;
    scanf("%lld",&n);
    for(i=1;i<=n;i++)
    {
        scanf("%lld",&a[i]);
        b[i]=a[i];
    }
    init(n);
	scanf("%lld",&q);
    for(i=1;i<=q;i++)
    {
        scanf("%lld%lld%lld",&l,&r,&val);
		l^=ans;
		r^=ans;
		val^=ans;
		ans=query(l,r,val);
        printf("%lld\n",ans);
    }
    return 0;
}
2024/7/15 21:27
加载中...