社区讨论

TLE求条

P10673【MX-S1-T2】催化剂参与者 2已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@mk1463l2
此快照首次捕获于
2026/01/05 20:05
2 个月前
此快照最后确认于
2026/01/09 12:40
2 个月前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
int a[1000010];
int b[2000010];
int c[2000010];
int lb(int x){
	return x&(-x);
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int n,q;
	cin>>n>>q;
	int p=q;
	for(int i=1;i<=n;i++){
		int x;
		cin>>x;
		a[x]++;
	}
	for(int i=1;i<=n;i++){
        if(a[i]==0){
            continue;
        }
		int j=a[i];
		while(j<=2000000){
			b[j]++;
			c[j]+=a[i];
			j+=lb(j);
		}
	}
	while(q--){
		int x,y;
		cin>>x>>y;
		if(x==1){
			int i=a[y];
			while(i<=n+p){
				b[i]--;
				c[i]-=a[y];
				i+=lb(i);
			}
			a[y]++;
			i=a[y];
			while(i<=n+p){
				b[i]++;
				c[i]+=a[y];
				i+=lb(i);
			}
		}
		if(x==2){
			int i=a[y];
			while(i<=n+p){
				b[i]--;
				c[i]-=a[y];
				i+=lb(i);
			}
			a[y]--;
            if(a[y]==0){
                continue;
            }
			i=a[y];
			while(i<=n+p){
				b[i]++;
				c[i]+=a[y];
				i+=lb(i);
			}
		}
		if(x==3){
			int i=n+p;
			int sum=0;
			while(i){
				sum+=c[i]-b[i]*y;
				i-=lb(i);
			}
			i=y-1;
			while(i){
				sum-=c[i]-b[i]*y;
				i-=lb(i);
			}
			cout<<sum<<endl;
		}
	}
}
树状数组做法,只过了三个测试点,0pts

回复

3 条回复,欢迎继续交流。

正在加载回复...