求助,第8个点RE
查看原帖
求助,第8个点RE
530797
code_hyx楼主2022/12/11 15:05

数组开大一些又会MLE。

#include<bits/stdc++.h>
using namespace std;
long long treet[1000005];
long long n,m,a[200005],sum[1000005],ls[1000005],rs[1000005];
long long res=0,cnt=0,t,rt;
const long long inf=1e15;
void change(long long l,long long r,long long &k,long long x)
{
	if(k==0)k=++cnt;
	if(l==r)
	{
		treet[k]++;
		return;
	}
	long long mid=(l+r)/2;
	if(x<=mid)change(l,mid,ls[k],x);
	else change(mid+1,r,rs[k],x);
	treet[k]=treet[ls[k]]+treet[rs[k]];
}
long long search(long long l,long long r,long long k,long long x,long long y)
{
	if(x<=l&&y>=r)
	{
		return treet[k];
	}
	long long mid=(l+r)/2;
	long long res=0;
	if(x<=mid)res+=search(l,mid,ls[k],x,y);
	if(y>mid)res+=search(mid+1,r,rs[k],x,y);
	return res;
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>t;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		sum[i]=sum[i-1]+a[i];
	}
	for(int i=n;i>=1;i--)
	{
		change(1,inf*2,rt,sum[i]+inf);
		res+=search(1,inf*2,rt,1,sum[i-1]+t+inf-1);
		//cout<<res<<"\n";
	}
	cout<<res;
	return 0;
}
2022/12/11 15:05
加载中...