90pts求助WA on #11
查看原帖
90pts求助WA on #11
374756
忘怜城羡楼主2023/10/25 21:34
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int MAXN=1e6+7,maxn=1e3+7;
int a[MAXN],s[maxn];
signed main()
{
	int n,q;
	scanf("%lld%lld",&n,&q);
	int len=sqrt(n);
	for(int i(1);i<=n;++i)
	scanf("%lld",&a[i]);
	for(int i(1);i<=n;++i)
		if((i-1)%len==0&&((i-1)/len+1)*len<=n)
		{
			sort(a+((i-1)/len)*len+1,a+((i-1)/len+1)*len+1);
			i=((i-1)/len+1)*len;
		}
	while(q--)
	{
		char opt;
		int l,r,c;
		cin>>opt;
		scanf("%lld%lld%lld",&l,&r,&c);
		if(opt=='M')
		{
			for(int j(l);j<=r;++j)
			{
				if((j-1)%len!=0||((j-1)/len+1)*len>r)
				{
					a[j]+=c;
					if(j%len==0)
						sort(a+(j/len)*len+1,a+(j/len+1)*len+1);
				}
				else
				{
					s[(j-1)/len+1]+=c;
					j=((j-1)/len+1)*len;
				}
			}
		}
		else
		{
			int ans=0;
			for(int j(l);j<=r;++j)
			{
				if((j-1)%len!=0||((j-1)/len+1)*len>r)
				{
					if(a[j]+s[(j-1)/len+1]>=c)
						ans++;
				}
				else
				{
					int ls=j,rs=((j-1)/len+1)*len,cnt=-1;
					while(ls<=rs)
					{
						int mid=(ls+rs)>>1;
						if(a[mid]+s[(j-1)/len+1]>=c)
						{
							cnt=mid;
							rs=mid-1;
						}
						else
						ls=mid+1;
					}
					if(cnt!=-1)
						ans+=max(0ll,((j-1)/len+1)*len-cnt+1);
					j=((j-1)/len+1)*len;
				}
			}
			printf("%lld\n",ans);
		}
	}
}
2023/10/25 21:34
加载中...