codeforces 863D

来源:互联网 发布:sql server 认证 编辑:程序博客网 时间:2024/06/16 00:05

原题链接

我的思路:

一开始看到操作,还以为是线段树,吓得我根本就准备溜了。后来想想,能不能直接模拟,算一算发现好像不太能这么做,但是把当前的x还原成在a[i]中的下标还是可以写的。

#include <iostream>#include <cstdio>const int maxn = 2e5 + 20;int n, q, m;int a[maxn], t[maxn], l[maxn], r[maxn];using namespace std;int main() {    scanf("%d%d%d", &n, &q, &m);    for(int i = 1; i <= n; i++) {        scanf("%d", &a[i]);    }    for(int i = 1; i <= q; i++) {        scanf("%d%d%d", &t[i], &l[i], &r[i]);    }    while(m--) {        int x;        scanf("%d", &x);        for(int i = q; i > 0; i--) {            if(l[i] <= x && x <= r[i]) {                if(t[i] == 2) {                    x = l[i] + r[i] - x;                } else {                    if(x > l[i]) {                        x--;                    } else {                        x = r[i];                    }                }            }        }        printf("%d ", a[x]);    }}
原创粉丝点击