• Monotonic Renumeration- codeforce


    题解

    依次判断每个位置是否能有两个取值,即(a_i = a_{i - 1})(a_i=a_{i - 1} + 1)。判断条件:没有数与它相同,或者它不落在两个相同的数之间。

    代码

    int main()
    {
        cin >> n;
        Rep(i, 1, n) {
            cin >> a[i];
            q[a[i]] = i;
        }
    
        int ma = 0;
        LL ans = 1, cnt = -1;
    
        Rep(i, 1, n) {
            ma = max(ma, q[a[i]]);
            if (ma == i) {
                cnt++;
                if (cnt) ans = (ans * 2) % mod;
            }
        }
    
        cout << ans << endl;
        return 0;
    }
    
    void pushDown(int root) {
        add[lson] += add[root];
        add[rson] += add[root];
        add[root] = 0;
    }
    
    void Update(int l, int r, int root, int L, int R, int x) {
        if (l > R || r < L) return;
        if (L <= l && r <= R) {
            add[root] += x;
            return;
        }
        if (add[root]) pushDown(root);
        int mid = (l + r) >> 1;
        Update(l, mid, lson, L, R, x);
        Update(mid + 1, r, rson, L, R, x);
    }
    
    int Find(int l, int r, int root, int pos) {
        if (l == r) return add[root];
        if (add[root]) pushDown(root);
        int mid = (l + r) >> 1;
        int ans = 0;
        if (pos <= mid) ans = Find(l, mid, lson, pos);
        else ans = Find(mid + 1, r, rson, pos);
        return ans;
    }
    
    
    int main()
    {
        cin >> n;
        Rep(i, 1, n) cin >> a[i];
    
        Rep(i, 1, n) q[a[i]] = max(q[a[i]], i);
    
        Rep(i, 1, n) if (!use[a[i]]) {
            use[a[i]] = 1;
            Update(1, n, 1, i, q[a[i]], 1);
        }
    
        vis[a[1]] = 1;
    
        LL ans = 1;
        Rep(i, 2, n) if (!vis[a[i]]) {
            vis[a[i]] = 1;
            if (Find(1, n, 1, i) == 1) ans = (ans * 2) % mod;
        }
        cout << ans << endl;
        
        return 0;
    }
    
  • 相关阅读:
    广佛肇城轨年内通车 佛山西站预计2017年中通车
    MTK+Android编译
    电量检测芯片BQ27510使用心得
    放大电路的分析方法
    放大电路的分析方法
    模拟电子放大电路分析
    模拟电子技术二极管
    unsigned 整型实现无溢出运算
    hdu 5317 RGCDQ(前缀和)
    CodeForces 429 B Working out(递推dp)
  • 原文地址:https://www.cnblogs.com/zgglj-com/p/10249317.html
Copyright © 2020-2023  润新知