有一个长为n的数列,共有m次操作。每次操作会翻转一个区间l到r。问最终序列?
输入格式
第一行一个整数n,表示序列中的元素个数。
第二行n个整数,表示原序列。
第三行一个整数m,表示翻转次数。
接下来m行每行两个整数l,r。
输出格式
一行n个整数,表示最终序列。
样例输入:
3
1 2 3
1
1 2
2 1 3
代码1:
#include<bits/stdc++.h>
using namespace std;
int x[1001],y[1001];
int main(){
int n,m,d,l,r;
cin>>n;
for(int i=1;i<=n;i++){
cin>>x[i];
}
cin>>m;
for(int i=1;i<=m;i++){
cin>>l>>r;
for(int j=l;j<=r;j++){
y[j]=x[j];
}
for(int j=r,k=l;j>=l;j--,k++){
x[k]=y[j];
}
}
for(int i=1;i<=n;i++){
cout<<x[i]<<" ";
}
return 0;
}
代码2:
#include<bits/stdc++.h>
using namespace std;
int x[1001],y[1001];
int main(){
int n,m,d,l,r;
cin>>n;
for(int i=1;i<=n;i++){
cin>>x[i];
}
cin>>m;
for(int i=1;i<=m;i++){
cin>>l>>r;
//if((l+r)%2==0){
for(int s1=l,s2=r,s3=1;s3<=(r-l+1)/2;s1++,s2--,s3++){
int temp;
temp=x[s1];
x[s1]=x[s2];
x[s2]=temp;
}
//}
}
for(int i=1;i<=n;i++){
cout<<x[i]<<" ";
}
return 0;
}