题目描述
给你一个长度为 的字符串 ,由大写和小写英文字母组成。
对字符串 进行 次修改。由两个整数和一个字符组成的元组 表示 -th 修改 ,如下所示。
- 如果是,则将的个字符改为。
- 如果是 ,将 中的所有大写字母转换为小写字母(此操作忽略 )。
- 如果是 ,将 中的所有小写字母转换为大写字母(此操作忽略 )。
在操作后打印。
输入格式
第一行输入一个整数,表示字符串的长度。
第二行输入字符串。
第三行输入一个整数,表示修改的次数。
接下来行,每行输入三个内容,为修改类型,为对应的修改参数。
输出格式
输出一行,包含一个字符串,为修改后的字符串。
样例
样例输入 1
复制10
HELLOWORLD
3
2 1 a
1 1 H
1 6 W
样例输出 1
复制HelloWorld
样例输入 2
复制14
IloveCPlusPlus
10
2 0 a
1 10 G
1 1 m
1 2 E
1 1 F
2 2 a
1 7 b
3 5 a
3 0 a
1 5 i
样例输出 2
复制FEOViCBLUGPLUS
_____________________________________________________________________________
一开始暴力0分啊,小瞧语法基础了
好家伙这时间范围和数据大小困了我114514毫秒,优化了20分钟才过
呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜
写作不易,点个赞呗!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
_____________________________________________________________________________
#include <bits/stdc++.h>
using namespace std;
long long n,ans,Max,m,flag=0;
int a[1000005],b[1000005],x[1000005];
char c[1000005],y[1000005];
string s;
int main(){cin>>n;cin>>s;cin>>m;for(int i=1;i<=m;i++){cin>>a[i]>>b[i]>>c[i];if(a[i]==1){s[b[i]-1]=c[i];ans++;x[ans]=b[i]-1;y[ans]=c[i];}else if(a[i]==2)flag=1,ans=0; else if(a[i]==3)flag=2,ans=0; }if(flag==1)for(int j=0;j<n;j++)if(s[j]>=65&&s[j]<=90)s[j]=(char)(s[j]+32); if(flag==2)for(int j=0;j<n;j++)if(s[j]>=97&&s[j]<=122)s[j]=(char)(s[j]-32);for(int i=1;i<=ans;i++)s[x[i]]=y[i];for(int i=0;i<n;i++)cout<<s[i];
}