社区讨论

线段树求组MLE

P2464[SDOI2008] 郁闷的小 J参与者 1已保存回复 0

讨论操作

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

当前回复
0 条
当前快照
1 份
快照标识符
@mhjujfuz
此快照首次捕获于
2025/11/04 08:44
4 个月前
此快照最后确认于
2025/11/04 08:44
4 个月前
查看原帖

求助

map T一个
un...map MLE两个
gp
...table MLE一个
cc
..._table MLE两个
CPP
#include<bits/stdc++.h>
#include<bits/extc++.h>
#define ls id<<1
#define rs id<<1|1
using namespace __gnu_pbds;
using namespace std;
const int N=1e5+5;
int sum,n,Q,a[N];
struct node{
	gp_hash_table<int,int>t;
}Tree[270000];
void Qxiu(int l,int r,int left,int right,int id,int f){
	Tree[id].t[f]++;
	Tree[id].t[a[left]]--;
	if(left<=l&&r<=right){
		return;
	}
	int mid=l+r>>1;
	if(left<=mid)Qxiu(l,mid,left,right,ls,f);
	if(right>mid)Qxiu(mid+1,r,left,right,rs,f);
}
void Qzo(int l,int r,int left,int right,int id,int f){
	if(left<=l&&r<=right){
		sum+=Tree[id].t[f];
		return;
	}
	int mid=l+r>>1;
	if(left<=mid)Qzo(l,mid,left,right,ls,f);
	if(right>mid)Qzo(mid+1,r,left,right,rs,f);
}
signed main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin>>n>>Q;
	for(int i=1;i<=n;i++){
		int X;
		cin>>X;
		Qxiu(1,n,i,i,1,X);
		a[i]=X;
	}
	while(Q--){
		char op;
		int l,r,k;
		sum=0;
		cin>>op>>l>>r;
		if(op=='Q'){
			cin>>k;
			Qzo(1,n,l,r,1,k);
			cout<<sum<<"\n";
		}
		else{
			Qxiu(1,n,l,l,1,r);
			a[l]=r;
		}
	}
	return 0;
}

回复

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

正在加载回复...