zoukankan      html  css  js  c++  java
  • POJ-2528 Mayor's posters 线段树 离散化

    n <= 10000 人贴海报,问最后可以看到的海报的个数。

    1<=li<=ri<=10000000

    由于范围很大,注意离散化。

    bool vis[maxn * 4];
    int a[maxn * 4];
    int L[maxn * 4];
    int R[maxn * 4];
    int lazy[maxn * 4];
    int ans;
    
    
    void Pushdown(int rt, int l,int r) {
        if (lazy[rt]) {
            lazy[rt << 1] = lazy[rt];
            lazy[rt << 1 | 1] = lazy[rt];
            lazy[rt] = 0;
        }
    }
    
    void Build(int i, int l, int r) {
        if (l == r) {
            return;
        }
        int mid = l + r >> 1;
        Build(i << 1, l, mid);
        Build(i << 1 | 1, mid + 1, r);
    }
    
    
    void update(int i, int l, int r, int L, int R, int v) {
        if (L <= l && r <= R) {
            lazy[i] = v;
            return;
        }
        Pushdown(i, l, r);
        int mid = l + r >> 1;
        if (L <= mid) update(i << 1, l, mid, L, R, v);
        if (R > mid) update(i << 1 | 1, mid + 1, r, L, R, v);
    }
    
    void query(int i, int l, int r) {
        if (lazy[i] && !vis[lazy[i]]) {
            ans++;
            vis[lazy[i]] = 1;
            return;
        }
        if (l == r) return;
        Pushdown(i, l, r);
        int mid = l + r >> 1;
        query(i << 1, l, mid);
        query(i << 1 | 1, mid + 1, r);
    }
    
    
    int main() {
        int T = readint();
        while (T--) {
            ans = 0;
            memset(vis, 0, sizeof vis);
            memset(lazy, 0, sizeof lazy);
            int n = readint();
            int cnt = 1;
            for (int i = 1; i <= n; i++) L[i] = readint(), R[i] = readint(), a[cnt++] = L[i], a[cnt++] = R[i];
            sort(a + 1, a + cnt );
            int m = unique(a + 1, a + cnt) - (a + 1);
            int tmp = m;
            for (int i = 2; i <= m; i++) {
                if (a[i] - a[i - 1] > 1) a[++tmp] = a[i - 1] + 1;
            }
            sort(a + 1, a + tmp + 1);
            for (int i = 1; i <= n; i++) {
                int p = lower_bound(a + 1, a + tmp + 1, L[i]) - a;
                int q = lower_bound(a + 1, a + tmp + 1, R[i]) - a;
                update(1, 1, tmp, p, q, i);
            }
            query(1, 1, tmp);
            Put(ans);
            puts("");
        }
    }
  • 相关阅读:
    类别的三个作用
    require()
    commonJS
    ng-app&data-ng-app
    《css网站布局实录》(李超)——读书札记
    高性能JS(读书札记)
    两个同级div重叠的情况
    前端性能优化
    正则表达式
    ajax
  • 原文地址:https://www.cnblogs.com/hznumqf/p/13450754.html
Copyright © 2011-2022 走看看