P6823 「EZEC-4」zrmpaul Loves Array
2024-08-25 22:50:19
发现进行一次排序后先前的操作都无效了,所以只需做最后一次排序后的操作。翻转操作打个翻转标记,互换操作根据翻转标记即可。
时间复杂度 \(O\left(n+m\right)\)。
code:
#include<bits/stdc++.h>
using namespace std;
#define N 1000005
#define For(i,x,y)for(i=x;i<=(y);i++)
int x[N],y[N],opt[N],a[N];
int read()
{
int A;
bool K;
char C;
C=A=K=0;
while(C<'0'||C>'9')K|=C=='-',C=getchar();
while(C>'/'&&C<':')A=(A<<3)+(A<<1)+(C^48),C=getchar();
return(K?-A:A);
}
void write(int X)
{
if(X<0)putchar('-'),X=-X;
if(X>9)write(X/10);
putchar(X%10|48);
}
int main()
{
bool rev=0;
int n,m,i,j;
n=read(),m=read();
For(i,1,n)a[i]=i;
For(i,1,m)
{
opt[i]=read();
if(opt[i]==3)x[i]=read(),y[i]=read();
}
i=m;
while(i&&opt[i]>2)i--;
if(opt[i]==2)
For(j,1,n>>1)swap(a[j],a[n-j+1]);
while(++i<=m)
if(opt[i]==3)if(rev)swap(a[n-x[i]+1],a[n-y[i]+1]);
else swap(a[x[i]],a[y[i]]);
else rev^=1;
For(i,1,n)write((rev?a[n-i+1]:a[i])),putchar(' ');
return 0;
}
最新文章
- H5坦克大战之【玩家控制坦克移动】
- .net面试(汇总2)
- 在Chrome+Visual Studio中调试asp.net程序很慢的问题(Firefox也有类似问题)
- PE文件头
- css之cursor,float
- Visual Studio个人常用快捷键
- EOF 与 getchar()
- JAVA多线程下,获取递增的序列号
- hdu4709求三角形面积
- 基于web的网上书城系统开发-----登录注册
- 【C#附源码】数据库文档生成工具支持(Excel+Htm)
- [luogu1972][bzoj1878][SDOI2009]HH的项链【莫队+玄学卡常】
- 【.net】The source was not found, but some or all event logs could not be searched
- Spring MVC 注解
- ADC采样间隔问题+TRGO作为ADC的触发源头
- python类的__slots__属性、__del__属性、上下文(__enter__和__exit__)、
- NYOJ----蛇形填数
- Qt-网易云音乐界面实现-8 主导航的实现-QtabWidget
- 常用LLDB指令
- PHP5.4 连接 SQL SERVER 2008