数据范围有误?
查看原帖
数据范围有误?
104624
Yingluosanqian楼主2021/5/18 21:57

长话短说,先更新后查询的代码wa了,先查询后更新的代码ac了。见注释处。

怀疑存在L==0的数据。

#include <bits/stdc++.h>
#define ll long long

using namespace std;

const int MAXN=100005;
const ll mod=1e9+7;
const ll INF=1e12;

ll n,L,R,sum[MAXN],ans;

ll rt,rtcnt;
struct ST{
	ll l,r,v;
}st[MAXN*200];

void upd(ll &i,ll tl,ll tr,ll num){
	if(!i) i=++rtcnt;
	st[i].v++;
	if(tl==tr) return;
	ll mid=tl+tr>>1;
	if(mid>=num) upd(st[i].l,tl,mid,num);
	if(mid+1<=num) upd(st[i].r,mid+1,tr,num);
}

ll qry(ll &i,ll tl,ll tr,ll l,ll r){
	if(!i) return 0;
	if(tl>=l&&tr<=r){
		return st[i].v;
	}
	ll mid=tl+tr>>1,ret=0;
	if(mid>=l) ret+=qry(st[i].l,tl,mid,l,r);
	if(mid+1<=r) ret+=qry(st[i].r,mid+1,tr,l,r);
	return ret;
}

int main(){
	scanf("%lld%lld%lld",&n,&L,&R);
	upd(rt,-INF,INF,0);
	for(ll i=1;i<=n;i++){
		scanf("%lld",&sum[i]);
		sum[i]+=sum[i-1];
		ans+=qry(rt,-INF,INF,sum[i]-R,sum[i]-L);
		upd(rt,-INF,INF,sum[i]);//如果先upd在qry就wa了
	}
	printf("%lld",ans);

	return 0;
}

2021/5/18 21:57
加载中...