[数组]区间翻转
[数组]区间翻转
有一个长为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;
}