1 条题解

  • 0
    @ 2023-11-8 18:36:09
    #include <bits/stdc++.h>
    using namespace std;
    const int maxn = 1e5 + 5;
    int n, m, a[maxn], b[maxn], lazy[maxn<<2];
    
    #define lson l, mid, rt<<1
    #define rson mid+1, r, rt<<1|1
    
    void push_down(int rt) {
        if (lazy[rt] != n+1) {
            lazy[rt<<1] = lazy[rt];
            lazy[rt<<1|1] = lazy[rt];
            lazy[rt] = n+1;
        }
    }
    
    void build(int l, int r, int rt) {
        lazy[rt] = n + 1;
        if (l == r) return;
        int mid = (l + r) / 2;
        build(lson);
        build(rson);
    }
    
    void update(int L, int R, int d, int l, int r, int rt) {
        if (L <= l && r <= R) {
            lazy[rt] = d;
            return;
        }
        push_down(rt);
        int mid = (l + r) / 2;
        if (L <= mid) update(L, R, d, lson);
        if (R > mid) update(L, R, d, rson);
    }
    
    int query(int p, int l, int r, int rt) {
        if (l == r) {
            if (lazy[rt] != n+1) return a[p - lazy[rt]];
            return b[p];
        }
        push_down(rt);
        int mid = (l + r) / 2;
        return (p <= mid) ? query(p, lson) : query(p, rson);
    }
    
    int main() {
        scanf("%d%d", &n, &m);
        for (int i = 1; i <= n; i++) scanf("%d", a+i);
        for (int i = 1; i <= n; i++) scanf("%d", b+i);
        build(1, n, 1);
        while (m--) {
            int op, x, y, k;
            scanf("%d%d", &op, &x);
            if (op == 1) {
                scanf("%d%d", &y, &k);
                update(y, y+k-1, y-x, 1, n, 1);
            }
            else { // op == 2
                printf("%d\n", query(x, 1, n, 1));
            }
        }
        return 0;
    }
    
    • 1

    信息

    ID
    33
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    5
    已通过
    4
    上传者