#include <iostream>
#include <cstdio>
#include <string>
#include <sstream>
#include <cstdlib>
#include <algorithm>
using namespace std;
string int2string(int i) {
stringstream stream;
stream << i;
return stream.str();
}
int main(int argc, char** argv) {
int n, m;
while (scanf("%d%d", &n, &m) != EOF) {
string tar = "";
while (n--) {
int tmp;
scanf("%d", &tmp);
tar += int2string(tmp);
}
while (m--) {
int type, l, r, len, x;
scanf("%d%d%d", &type, &l, &r);
switch (type) {
case 1: // l - 1 ~ r - 1
{
len = r - l + 1;
string sub = tar.substr(l - 1, len);
string tmp = "";
for (int i = 0; i < sub.size(); ++i) {
tmp += sub[sub.size() - 1 - i];
}
tar.erase(l - 1, len);
tar.insert(l - 1, tmp);
}
break;
case 2:
{
scanf("%d", &len);
string a = tar.substr(l - 1, len);
string b = tar.substr(r - 1, len);
tar.replace(l - 1, len, b);
tar.replace(r - 1, len, a);
}
break;
case 3:
{
len = r - l + 1;
scanf("%d", &x);
string tmp = "";
for (int i = 0; i < len; ++i) tmp += int2string(x);
tar.replace(l - 1, len, tmp);
}
break;
case 4:
{
char tmp[100];
len = r - l + 1;
for (int i = 0; i < len; ++i) {
tmp[i] = tar[l - 1 + i];
}
sort(tmp, tmp + len);
string sub = tmp;
tar.replace(l - 1, len, sub);
}
break;
case 5:
{
int res = 0;
for (int i = l - 1; i < r; ++i) {
res += atoi(tar.substr(i, 1).c_str());
}
printf("%d\n", res);
}
break;
default:
break;
}
}
}
return 0;
}
//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
2017计算机院B
最新推荐文章于 2020-08-18 15:07:55 发布