题目描述
给定一个长度为n (n>=1)的字符串序列,标记为[a1a2…an],在字符串序列上定义以下5种操作类型,分别标号为1,2,3,4,5,同时l和r分别表示al 和ar 的下标,len 表示需要操作的子序列长度。操作定义如下:
输入格式
第一行输入n和m,表示字符串序列长度n和操作命令数m,
第二行输入n个整数构成字符串序列,在第三行及之后各行(共计m行)中,每行输入一个操作类型命令
输出格式
输出每次的第5种操作类型的结果
Example Inputs
9 8
1 2 3 4 5 6 7 8 9
1 4 8
5 7 9
2 2 5 3
5 5 9
3 5 8 3
4 3 8
5 7 9
5 1 9
18
26
20
40
#include<bits/stdc++.h>
using namespace std;
int str[101];
int main() {
int n,m,ans;
cin>>n>>m;
memset(str,0,sizeof(str));
for(int i=1; i<=n; i++) {
cin>>str[i];
}
while(m--) {
int op,l,r,len,x;
cin>>op>>l>>r;
int sum=0;
switch(op) {
case 1:
reverse(str+l,str+r+1);
break;
case 2:
cin>>len;
for(int j=0; j<len; j++) {
ans=str[l+j];
str[l+j]=str[r+j];
str[r+j]=ans;
}
break;
case 3:
cin>>x;
for(int i=l;i<=r;i++){
str[i]=x;
}
break;
case 4:
sort(str+l,str+r+1);
break;
case 5:
sum=0;
for(int i=l;i<=r;i++){
sum+=str[i];
}
cout<<sum<<endl;
break;
default:
break;
}
}
}