zoukankan      html  css  js  c++  java
  • [LOJ6282] 数列分块入门 6

    给定一个长为 (n) 的序列,有 (n) 次操作,每次可能在指定位置插入一个数,或者询问指定位置的数是多少,数据随机

    Solution

    考虑到数据随机,我们维护 (sqrt n)vector,每次操作的时候暴力扫一遍找到对应下标的位置即可

    事实证明这样 T 了,我们该用 list,于是就过了

    #include <bits/stdc++.h>
    using namespace std;
    
    #define int long long
    const int N = 200005;
    
    int n, a[N], b[N], len, siz[N];
    list<int> v[N];
    
    #define li list<int>::iterator
    
    li operator+(li a, int b) {
        while (b--) a++;
        return a;
    }
    
    signed main() {
        ios::sync_with_stdio(false);
        cin >> n;
        len = ceil(sqrt(n));
        for (int i = 1; i <= n; i++) cin >> a[i];
        for (int i = 1; i <= n; i++) b[i] = (i - 1) / len + 1;
        for (int i = 1; i <= n; i++) v[b[i]].push_back(a[i]), siz[b[i]]++;
        for (int _ = 1; _ <= n; _++) {
            int opt, l, r, c;
            cin >> opt >> l >> r >> c;
            if (opt == 0) {
                --l;
                int p = 1;
                while (l >= siz[p] && p <= n / len + 1) {
                    l -= siz[p++];
                }
                v[p].insert(v[p].begin() + l, r);
                siz[p]++;
            } else {
                --r;
                int p = 1;
                while (r >= siz[p] && p <= n / len + 1) {
                    r -= siz[p++];
                }
                cout << *(v[p].begin() + r) << endl;
            }
        }
    }
    
  • 相关阅读:
    Linux Shell 基本语法
    VIM选择文本块/复制/粘贴
    linux vi命令详解2
    SSH命令详解2
    JAVA调用Shell脚本
    scp命令的用法详解
    Java实践 — SSH远程执行Shell脚本
    Remote SSH: Using JSCH with Expect4j
    c++内置函数---7
    c++将引用作为函数的参数---6
  • 原文地址:https://www.cnblogs.com/mollnn/p/12703455.html
Copyright © 2011-2022 走看看