90pts,最后一个过不去,悬赏关注求大佬帮忙!stO
查看原帖
90pts,最后一个过不去,悬赏关注求大佬帮忙!stO
778344
warmingcium楼主2023/1/23 17:31
#include<bits/stdc++.h>
using namespace std;
#define int long long
int a[1000006];
int st[1006][1006];
int block[1003];
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);
	int n,q;
	cin>>n>>q;
	int siz=sqrt(n);
	int j=-1;
	
	for(int i=0;i<n;i++){
		cin>>a[i];
		if(i%siz==0){
			sort(st[j],st[j]+siz);
			j++;
		}
		st[j][i%siz]=a[i];
	}
	
//	for(int i=0;i<10;i++){
//		for(int k=0;k<10;k++) cout<<st[i][k]<<" ";
//		cout<<endl; 
//	}
	char op; int l,r,c;
	while(q--){
		cin>>op;
		cin>>l>>r>>c;
		l--; r--;
		int lb=l/siz;
		int rb=r/siz;
		
		if(op=='M'){
			if(lb==rb){
				for(int i=l;i<=r;i++) a[i]+=c; 
			}else{
				for(int i=l;i<(lb+1)*siz;i++) a[i]+=c;
				for(int i=lb*siz;i<lb*siz+siz;i++) st[lb][i%siz]=a[i];
				sort(st[lb],st[lb]+siz);
				for(int i=lb+1;i<rb;i++) block[i]+=c;
				for(int i=siz*rb;i<=r;i++) a[i]+=c;
				for(int i=rb*siz;i<rb*siz+siz;i++) st[rb][i%siz]=a[i];
				sort(st[rb],st[rb]+siz);
			}
		}
		
		if(op=='A'){
			int ans=0;
			if(lb==rb) for(int i=l;i<=r;i++){
				if(a[i]>=c) ans++;
			}
			if(lb!=rb){
				for(int i=l;i<(lb+1)*siz;i++) if(a[i]>=c) ans++;
				for(int i=siz*rb;i<=r;i++) if(a[i]>=c) ans++;
				for(int i=lb+1;i<rb;i++) ans+=(siz-(lower_bound(st[i],st[i]+siz,c-block[i])-st[i]));
			}
			printf("%lld\n",ans);
		}
		
	}
	return 0;
}
2023/1/23 17:31
加载中...