• HDU 4288 Coder 【线段树+离线处理+离散化】


    题意略。

    离线处理,离散化。然后就是简单的线段树了。需要根据mod 5的值来维护。具体看代码了。

    /*
        线段树+离散化+离线处理
    */
    
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    using namespace std;
    typedef long long ll;
    #define N 100010
    ll sum[N<<2][5];
    int a[N], n, m, cnt[N<<2];
    
    struct node {
        char c;
        int x;
    } q[N];
    void Up(int rt) {
        cnt[rt] = cnt[rt<<1] + cnt[rt<<1|1];
        for (int i=0; i<5; i++)
            sum[rt][i] = sum[rt<<1][i] + sum[rt<<1|1][(i-cnt[rt<<1]%5+5)%5];
    }
    void add(int idx, int val, int l, int r, int rt) {
        if (l == r) {
            cnt[rt] = 1;
            sum[rt][1] = val;
            return ;
        }
        int mid = (l + r) >> 1;
        if (idx <= mid) add(idx, val, l, mid, rt<<1);
        else add(idx, val, mid+1, r, rt<<1|1);
        Up(rt);
    }
    void del(int idx, int l, int r, int rt) {
        if (l == r) {
            sum[rt][1] = cnt[rt] = 0;
            return ;
        }
        int mid = (l + r) >> 1;
        if (idx <= mid) del(idx, l, mid, rt<<1);
        else del(idx, mid+1, r, rt<<1|1);
        Up(rt);
    }
    int main() {
    
        char s[10];
        while (scanf("%d", &n) == 1) {
            m = 0;
            for (int i=0; i<n; i++) {
                scanf(" %s", s);
                q[i].c = s[0];
                if (s[0] != 's') {
                    scanf("%d", &q[i].x);
                    a[m++] = q[i].x;
                }
            }
            sort(a, a+m);
            m = unique(a, a+m) - a;
            memset(cnt, 0, sizeof(cnt));
            memset(sum, 0, sizeof(sum));
            int pos;
            for (int i=0; i<n; i++) {
                if (q[i].c == 's') printf("%I64d
    ", sum[1][3]);
                else {
                    pos = lower_bound(a, a+m, q[i].x) - a + 1;
                    if (q[i].c == 'a') add(pos, q[i].x, 1, m, 1);
                    else del(pos, 1, m, 1);
                }
            }
        }
    
    
        return 0;
    }
    


  • 相关阅读:
    python的内置方法 isinstance && issubclass
    python类的内置方法
    反射(python内置方法)
    类装饰器 @property
    多态与多态性
    组合(对象1.属性=对象2)
    类的封装
    多继承 mro 继承顺序 与 菱形继承(钻石继承)
    类的继承派生&&重写
    封装 继承 多态 派生 组合定义 && 对象之间交互
  • 原文地址:https://www.cnblogs.com/james1207/p/3354350.html
Copyright © 2020-2023  润新知