我服了1分钟出思路tm调了30min+
什么鬼东西,多组数据样例过了,test2寄了
但看不出来问题啊
与这位大佬的题解类似:https://www.luogu.com.cn/blog/487539/solution-cf1878d
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
int T,n,l[N],r[N],m,a[N];
char s[N];
signed main(){
scanf("%d",&T);
while(T--){
scanf("%d%d",&n,&m);
scanf("%s",s+1);
for(int i=1;i<=m;i++) scanf("%d",&l[i]);
for(int i=1;i<=m;i++) scanf("%d",&r[i]);
sort(l+1,l+m+1);
sort(r+1,r+m+1);
int Q,x;scanf("%d",&Q);
while(Q--){
scanf("%d",&x);
int ans=lower_bound(r+1,r+m+1,x)-r;
int ql=min(x,r[ans]+l[ans]-x),qr=max(x,r[ans]+l[ans]-x);
a[ql]++,a[qr+1]--;
}
for(int i=1;i<=n;i++) a[i]+=a[i-1];
int last=1;
for(int i=1;i<=m;i++){
int L=l[i],R=r[i];
while(L<R){
if(a[L]&1) swap(s[L],s[R]);
//由于是对称翻转
//所以翻转了奇数次,就需要交换
L++,R--;
}
}
printf("%s\n",s+1);
for(int i=1;i<=n;i++) a[i]=0;
}
return 0;
}