Please enable java script to visit.
NOTEBOOK
HOMEPHP / MySQLJS / HTMLWXappPythonC++Blender其他
小明与序列操作【***】 - NOTEBOOK
小明与序列操作【***】
C++
Posted on 2023-08-07
摘要 : OI第一次考试第五题。
描述

给定一个长度为 n 的整数序列,你需要对序列进行 q 次操作,每次操作为下列三种操作之一:

元素修改:修改当前序列中的某个数
元素删除:删除当前序列中的某个数,同时使序列的长度减 1
区间翻转:翻转当前序列中的若干位置连续的数
完成所有 q 次操作后,请输出最终的序列

输入描述

第一行两个整数 n,q,表示序列长度和操作次数
第二行 n 个整数 a1 ,a 2,…,a n,表示序列中的数

接下来 q 行,每行表示一次操作,
1 x y 表示把当前序列中的第 x 个数修改为 y
2 x 表示删除当前序列中的第 x 个数
3 l r 表示翻转当前序列中的第 l 到第 r 个数

数据范围:
1≤n≤1000,1≤q≤1000,−10000≤a i≤10000, 1≤x≤n,−10000≤y≤10000,1≤l≤r≤n
保证每次操作均合法,即每个被操作的数均存在

输出描述:
第一行一个整数 n,表示最终序列的长度
第二行 n 个整数,表示最终序列中的 n 个数,相邻的数用一个空格隔开

#include <iostream>
using namespace std;
int main(){
int n,q;
cin >> n>>q;
int array[n+2];
for(int i=1;i<=n;i++){
cin >> array[i];
}
int len = n;
int nowaction;
for(int i=1;i<=q;i++){
cin >>nowaction;

int x,y;
int l,r;
int temp[100000];
int tempi=0;

switch(nowaction){
case 1:
cin >> x>>y;
array[x]=y;
break;
case 2:
cin >>x;
for(int i=x;i<len;i++){
array[i] = array[i+1];
}
len --;
// cout <<"len:"<<len<<endl;
break;
case 3:
cin >>l>>r;
for(int i=r;i>=l;i--){
tempi ++;
temp[tempi] = array[i];
// continue;
}
tempi=1;
for(int i=l;i<=r;i++){
array[i] = temp[tempi];
tempi ++;
}
break;
}
}
cout << len<<endl;
for(int i=1;i<=len;i++){
cout<<array[i]<<" ";
}





}