• POJ2528


    Description

    思路

    板子题,需要离散化。然后从最后一张海报往前枚举看看有没有被完全覆盖。

    #include <cstdio>
    #include <iostream>
    #include <cstring>
    #include <algorithm>
    #include <vector>
    
    using namespace std;
    
    typedef long long ll;
    
    const ll maxn = 100010;
    
    ll sum[maxn << 2];
    ll lazy[maxn << 2];
    vector<int> numb;
    
    void pushup(int rt) {
        sum[rt] = sum[rt << 1] + sum[rt << 1 | 1];
    }
    
    void pushdown(int rt, int len) {
        if(lazy[rt]) {
            lazy[rt << 1] = lazy[rt];
            lazy[rt << 1 | 1] = lazy[rt];
            sum[rt << 1] = lazy[rt] * (len - (len >> 1));
            sum[rt << 1 | 1] = lazy[rt] * (len >> 1);
            lazy[rt] = 0;
        }
    }
    
    void update(int L, int R, int lef, int rig, int rt, ll val) { //将区间[L,R]全设置为1
        if(lef >= L && rig <= R) {
            sum[rt] = val * (rig - lef + 1);
            lazy[rt] = val;
            return ;
        }
        pushdown(rt, rig - lef + 1);
        int mid = (lef + rig) / 2;
        if(L <= mid) update(L, R, lef, mid, rt << 1, val);
        if(R > mid) update(L, R, mid + 1, rig, rt << 1 | 1, val);
        pushup(rt);
    }
    
    void build(int lef, int rig, int rt) {
        if(lef > rig) return ;
        lazy[rt] = 0;
        if(lef == rig) {
            sum[rt] = 0;
            return ;
        }
        int mid = (lef + rig) / 2;
        build(lef, mid, rt << 1);
        build(mid + 1, rig, rt << 1 | 1);
        pushup(rt);
    }
    
    ll query(int L, int R, int lef, int rig, int rt) {
        if(lef >= L && rig <= R) return sum[rt];
        pushdown(rt, rig - lef + 1);
        int mid = (lef + rig) / 2;
        ll res = 0;
        if(L <= mid) res += query(L, R, lef, mid, rt << 1);
        if(R > mid) res += query(L, R, mid + 1, rig, rt << 1 | 1);
        return res;
    }
    
    
    struct sub {
        int l, r;
    }post[20000];
    
    int main() {
        int T;
        scanf("%d", &T);
        while(T--) {
            numb.clear();
            int n;
            scanf("%d", &n);
            for(int i = 0; i < n; i++) {
                int l, r;
                scanf("%d%d", &l, &r);
                numb.push_back(l);
                numb.push_back(r);
                post[i] = sub{l ,r};
            }
            sort(numb.begin(), numb.end());
            unique(numb.begin(), numb.end());
            for(int i = 0; i < n; i++) {
                post[i].l = lower_bound(numb.begin(), numb.end(), post[i].l) - numb.begin() + 1;
                post[i].r = lower_bound(numb.begin(), numb.end(), post[i].r) - numb.begin() + 1;
            }
            int ans = 0;
            int maxn = numb.size() + 2;
            build(1, maxn, 1);
            for(int i = n - 1; i >= 0; i--) {
                if(query(post[i].l, post[i].r, 1, maxn, 1) < post[i].r - post[i].l + 1) ans++;
                update(post[i].l, post[i].r, 1, maxn, 1, 1);
            }
            printf("%d
    ", ans);
        }
    }
    
  • 相关阅读:
    关于 L3 缓存行 cacheLIne 的研究!还是对程序有举足轻重的作用!
    所谓的科学,根本就没有解决问题的根本。如框架,框架再好,也需要内容。
    编译器开发,手动把汇编转 机器码
    测试HTML
    神奇的经历,顶上去保证上帝保佑你!!!!!
    ECS框架研究 ,unity 以及缓存行的研究
    AVX 指令详解 ,还有SSE指令
    关于 Visual Studio 2017 ,或2019 ,Installer 没检测到已安装的程序.以及C++ 创建项目失败
    TCP 协议 精解
    opc 相关组件
  • 原文地址:https://www.cnblogs.com/limil/p/12698299.html
Copyright © 2020-2023  润新知