请求加强数据
查看原帖
请求加强数据
188879
VioletIsMyLove楼主2023/11/2 11:58

这题的数据太弱了,以至于这个代码都能AC

#include<bits/stdc++.h>
using namespace std;
struct Amadeus{
	int l,r;
	int v;
}t[5200005];
int n,m,tot;
int rt[30];
char a[100005];
inline int read(){
	int ret=0,f=1;char ch=getchar();
	while(!isdigit(ch)){if(ch=='-')f=-f;ch=getchar();}
	while(isdigit(ch)){ret=ret*10+ch-'0';ch=getchar();}
	return ret*f;
}
void insert(int l,int r,int x,int p){
	if(l==r){t[p].v++;return;}
	int mid=(r-l>>1)+l;
	if(x<=mid)insert(l,mid,x,t[p].l?t[p].l:t[p].l=++tot);
	else insert(mid+1,r,x,t[p].r?t[p].r:t[p].r=++tot);
}
int split(int l,int r,int L,int R,int &p){
	int q=++tot;
	if(L<=l&&r<=R){t[q]=t[p];p=0;}
	else{
		int mid=(r-l>>1)+l;
		if(L<=mid)t[q].l=split(l,mid,L,R,t[p].l);
		if(mid<R)t[q].r=split(mid+1,r,L,R,t[p].r);
	}
	return q;
}
void merge(int p,int q){
	t[p].v+=t[q].v;
	if(t[q].l){
		if(t[p].l)merge(t[p].l,t[q].l);
		else t[p].l=t[q].l;
	}
	if(t[q].r){
		if(t[p].r)merge(t[p].r,t[q].r);
		else t[p].r=t[q].r;
	}
}
bool query(int l,int r,int x,int p){
	if(l==r)return t[p].v;
	int mid=(r-l>>1)+l;
	if(x<=mid&&t[p].l)return query(l,mid,x,t[p].l);
	if(mid<x&&t[p].r)return query(mid+1,r,x,t[p].r);
	return 0;
}
int main(){
	freopen("P8796.in","r",stdin);
	freopen("P8796.out","w",stdout);
	scanf("%s",a+1);n=strlen(a+1);
	for(int i=1;i<=26;i++)rt[i]=++tot;
	for(int i=1;i<=n;i++)insert(1,n,i,rt[a[i]-'a'+1]);
	m=read();
	while(m--){
		int l=read(),r=read();char x=getchar();getchar();char y=getchar();
		int q=split(1,n,l,r,rt[x-'a'+1]);
		merge(rt[y-'a'+1],q);
	}
	for(int i=1;i<=n;i++)
		for(int j=1;j<=26;j++)if(query(1,n,i,rt[j])){printf("%c",'a'+j-1);break;}
	return 0;
}

这份代码无法处理更改区间为1-n时的操作,也就意味着数据中没有一个是包含有1-n的操作的。这就可能会把一些写的不够细腻的线段树合并放过去,比如我qwq

2023/11/2 11:58
加载中...