分块30pts求调悬关
查看原帖
分块30pts求调悬关
918478
All_Wrong_Answer楼主2025/7/20 09:47

rt,#1#2#3#11 AC,其它WA

#include <bits/stdc++.h>
using namespace std;
inline long long read()
{
	long long x=0,f=1;char ch=getchar();
	while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
	while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
	return x*f;
}
struct node{
	long long sum;
	long long cnt;
	long long p[805];
}k[805];
long long n,m;
long long B;
long long x[500005];
int main(){
	n=read();
	m=read();
	for(long long i=1;i<=n;i++) x[i]=read();
	B=709;//sqrt(5000000) 上取整 +1
	for(long long i=0;i<=B;i++){
		if(n>=(i+1)*B){
			for(long long j=0;j<B;j++){
				if(i==0&&j==0) continue;
				k[i].p[j]=x[i*B+j];
				k[i].sum+=k[i].p[j];
				k[i].cnt++;
			} 
		}
		else if(n-(i*B)>=0){
			for(long long j=0;j<=n-(i*B);j++){
				k[i].p[j]=x[i*B+j];
				k[i].sum+=k[i].p[j];
				k[i].cnt++;
			}
		}
		else{
			for(long long j=0;j<B;j++){
				k[i].p[j]=LONG_LONG_MAX;
			}
			k[i].sum=0;
			k[i].cnt=0;
		}
	}
	for(long long i=1;i<=m;i++){
		char op;
		cin>>op;
		if(op=='C'){
			long long a=read(),b=read();
			k[a/B].sum-=b;
			k[a/B].p[a-a/B*B]-=b;
		} 
		if(op=='I'){
			long long a=read(),b=read();
			if(k[a/B].p[a-a/B*B]==LONG_LONG_MAX){
				k[a/B].p[a-a/B*B]=b;
				k[a/B].sum+=b;
				k[a/B].cnt++;
			}
			else{
				k[a/B].sum+=(b-k[a/B].p[a-a/B*B]);
				k[a/B].p[a-a/B*B]=b;
			}
		}
		if(op=='D'){
			long long a=read();
			for(long long i=0;i<=B;i++){
				if(a>k[i].cnt) a-=k[i].cnt;
				else{
					long long mq=0;
					for(long long j=0;j<B;j++){
						if(i==0&&j==0) continue; 
						if(k[i].p[j]!=LONG_LONG_MAX){
							mq++;
							if(mq==a){
							    k[i].cnt--;
							    k[i].sum-=k[i].p[j];
								k[i].p[j]=LONG_LONG_MAX;
								break;
							}
						}
					}
					break;
				}
			}
		}
		if(op=='Q'){
			long long ans=0;
			for(long long i=0;i<=B;i++) ans+=k[i].sum;
			cout<<ans<<endl;
		}
	}
	return 0;
}
2025/7/20 09:47
加载中...