小明的爸爸妈妈给了他n个立方体作为一套礼物。每个立方体有个数字ai写在上面,将所有立方体放在一排,然后去拆其他的礼物。这时,他的哥哥按照以下的规则重新排列了立方体:假设这些立方体被编号为1-n, 哥哥在第i步,会将第i个立方体到第 (n - i + 1) 个立方体整体反转,最初i=1,在i ≤ n - i + 1时他会一直这样做。当做完这些操作, 哥哥就跑了。小明发现它们的顺序变了。
请凭借现在的立方体摆放顺序帮助小明把它们排回初始位置。
输入
7
4 3 7 6 9 1 2
输出
2 3 9 6 7 1 4
1<=n<=200000
这道题
#include<bits/stdc++.h>
using namespace std;
int n,i,cs,a[200010],b[200010],f[200010],s[200010];
void fz(int x,int y){
int i,j;
for(i=x;i<=y;i++)
f[i]=s[i];
for(i=y,j=x;i>=x,j<=y;i--,j++)
s[i]=f[j];
}
int main(){
scanf("%d",&n);
if(n%2==0){
cs=n/2;
}
else{
cs=n/2+1;
}
for(i=1;i<=cs;i++){
a[i]=i;
b[i]=n-i+1;
}
for(i=1;i<=n;i++)
scanf("%d",&s[i]);
for(i=cs;i>=1;i--){
memset(f,0,sizeof(f));
fz(a[i],b[i]);
}
for(i=1;i<=n;i++)
printf("%d ",s[i]);
}
超时 请问如何改进