博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
863D - Yet Another Array Queries Problem(思维)
阅读量:7051 次
发布时间:2019-06-28

本文共 1262 字,大约阅读时间需要 4 分钟。

原题连接:

 

题意:对a数列有两种操作:

1 l r ,[l, r] 区间的数字滚动,即a[i+1]=a[i], a[l]=a[r]

2 l r ,[l, r] 区间的数字位置反转。

若干个操作之后输出a[b[i]].

 

思路:

由于是在操作结束后输出,且b[i]的个数不多(<=100),所以可以通过反推求出答案。

 

AC代码:

1 #include
2 #include
3 #include
4 using namespace std; 5 typedef long long LL; 6 const int MAXN = 2e5+10; 7 struct Query { 8 int type; 9 int l,r;10 }Q[MAXN];11 int a[MAXN]; 12 int n, q, m;13 void print(int b)14 {15 for (int i = 1;i <= q;i++) {16 if (b >= Q[i].l&&b <= Q[i].r) {17 if (Q[i].type == 1) {18 b--;19 if (b < Q[i].l)20 b = Q[i].r;21 }22 else 23 b = Q[i].r - (b - Q[i].l);24 }25 }26 printf("%d", a[b]);27 return;28 }29 int main() {30 31 scanf("%d %d %d", &n, &q, &m);32 for (int i = 1;i <= n;i++) {33 scanf("%d", &a[i]);34 }35 for (int i = q;i >= 1;i--) {36 scanf("%d %d %d", &Q[i].type, &Q[i].l, &Q[i].r);37 }38 int b;39 for (int i = 0;i < m;i++) {40 scanf("%d", &b);41 if (i != 0) printf(" ");42 print(b);43 }44 printf("\n");45 return 0;46 }

 

转载于:https://www.cnblogs.com/MasterSpark/p/7583236.html

你可能感兴趣的文章
大中型网站集群架构企业级高标准全自动实战项目征集
查看>>
7.5 TableLayout布局详解
查看>>
【虚拟化实战】存储设计之二LUN Sizing
查看>>
SCCM2012系列之八,SCCM2012客户机发现
查看>>
禁用和删除Exchange邮箱深入探讨
查看>>
QQ群排名自动吸粉,同样是玩群,为什么他们这么牛?
查看>>
nagios监控web/mysql多角度实战分享(三)
查看>>
互联网公司的项目经理:别轻易脚踩两只船
查看>>
《统一沟通-微软-实战》-7-配置-4-未分配号码的通知
查看>>
【DevOps】从理念到实施
查看>>
MySQL数据库CPU飙升紧急处理方法
查看>>
cocos2d-x一些核心概念介绍
查看>>
SCCM2012 R2实战系列之五:发现方法
查看>>
Windows10-AzureAD的支持,云的落地
查看>>
手把手教你使用ECharts绘制可视化图表
查看>>
Tomcat端口被占用解决方法(不用重启)
查看>>
使用 TS Web Access 在网站上访问该程序的链接
查看>>
什么是你的核心竞争力之五—变化与坚持
查看>>
一个存储交流的报告——闪存存储系统设计
查看>>
Windows下安装Resin及配置详解与发布应用
查看>>