专栏文章
ABC419 D
AT_abc419_d题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mioacajy
- 此快照首次捕获于
- 2025/12/02 15:57 3 个月前
- 此快照最后确认于
- 2025/12/02 15:57 3 个月前
简要题意
给定两个长度为 的小写英文字符串 和 ,以及 对整数 。
操作规则
按顺序依次执行以下操作():
- 交换子串:将 中从第 到第 的字符与 中相同位置的字符互换。
- 示例:
若 ,,且 ,则操作后:- 变为
abijkf(原cde替换为ijk) - 变为
ghcdel(原ijk替换为cde)
- 变为
- 示例:
输出所有 次操作完成后字符串 的最终结果。
分析
和简单题不能说很相似,只能说一模一样,纯纯树状数组板子题。
维护 tag 进行区间异或,最后单点查就行了,具体看代码。
Code
CPP#include<iostream>
using namespace std;
const int N=3e6+6;
bool a[N],c[N],tag[N];
int n,m;
int lowbit(int x){
return x&(-x);
}
int ask(int x){
bool sum=0;
for(int i=x;i<=n;i+=lowbit(i))
sum^=tag[i];
return sum;
}
void change(int l,int r,int k){
for(int i=r;i;i-=lowbit(i))
tag[i]^=k;
for(int i=l-1;i;i-=lowbit(i))
tag[i]^=k;
}
string s1,s2;
int main(){
cin>>n>>m;
cin>>s1>>s2;
for(int i=1;i<=m;i++){
int x,y,k;
cin>>x>>y;
change(x,y,1);
}
for(int i=1;i<=n;i++){
if(ask(i)==1) cout<<s2[i-1];
else cout<<s1[i-1];
}
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...