zoukankan      html  css  js  c++  java
  • 【Luogu】P1607庙会班车Fair Shuttle(线段树+贪心)

       我不会做贪心题啊……贪心题啊……题啊……啊……

       我真TM菜爆了啊……

       这题就像凌乱的yyy一样,把终点排序,终点相同的按起点排序。然后维护一个查询最大值的线段树。对于一个区间[l,r],如果这个区间已经有的最大值为s,那么这个区间最多还能装下c-s头奶牛。

       当然奶牛数量没那么多的话我也是没有办法

       最后说一句,奶牛到终点就下车了,可以给别的奶牛腾空间,不计入个数。所以奶牛在车上的区间为[l,r-1]。

    #include <cstdio>
    #include <iostream>
    #include <algorithm>
    #define N 100001
    #define min(x, y) ((x) < (y) ? (x) : (y))
    #define max(x, y) ((x) > (y) ? (x) : (y))
    #define root 1, 1, n
    #define ls now << 1, l, mid
    #define rs now << 1 | 1, mid + 1, r
    
    
    int k, n, c, ans;
    int sum[N << 2], add[N << 2];
    
    struct node
    {
        int s, t, m;
    }p[N];
    
    inline int read()
    {
        int x = 0, f = 1;
        char ch = getchar();
        for(; !isdigit(ch); ch = getchar()) if(ch == '-') f = -1;
        for(; isdigit(ch); ch = getchar()) x = (x << 1) + (x << 3) + ch  - '0';
        return x * f;
    }
    
    inline bool cmp(node x, node y)
    {
        return x.t < y.t;
    }
    
    inline void pushdown(int now)
    {
        if(add[now])
        {
            sum[now << 1] += add[now];
            sum[now << 1 | 1] += add[now];
            add[now << 1] += add[now];
            add[now << 1 | 1] += add[now];
            add[now] = 0;
        }
    }
    
    inline int query(int now, int l, int r, int x, int y)
    {
        if(x <= l && r <= y) return sum[now];
        pushdown(now);
        int mid = (l + r) >> 1, ret = 0;
        if(x <= mid) ret = max(ret, query(ls, x, y));
        if(mid < y) ret = max(ret, query(rs, x, y));
        return ret;
    }
    
    inline void update(int now, int l, int r, int x, int y, int d)
    {
        if(x <= l && r <= y)
        {
            sum[now] += d;
            add[now] += d;
            return;
        }
        pushdown(now);
        int mid = (l + r) >> 1;
        if(x <= mid) update(ls, x, y, d);
        if(mid < y) update(rs, x, y, d);
        sum[now] = max(sum[now << 1], sum[now << 1 | 1]);
    }
    
    int main()
    {
        int i, x;
        k = read();
        n = read();
        c = read();
        for(i = 1; i <= k; i++)
        {
            p[i].s = read();
            p[i].t = read();
            p[i].m = read();
        }
        std::sort(p + 1, p + k + 1, cmp);
        for(i = 1; i <= k; i++)
        {
            x = query(root, p[i].s, p[i].t - 1);
            if(x < c)
            {
                update(root, p[i].s, p[i].t - 1, min(p[i].m, c - x));
                ans += min(p[i].m, c - x);
            }
        }
        printf("%d
    ", ans);
        return 0;
    }
  • 相关阅读:
    SAP MM MIGO过账报错
    SAP MM MB5L事务代码'仅总计'选项初探
    SAP MM 巴西采购订单中的NCM Code
    SAP MM Storage Location Missing in MD04 Result?
    SAP MM 预留单据的历史修改记录?
    2018-8-10-上传代码-CodePlex
    2019-9-2-win10-uwp-九幽图床
    2018-2-13-win10-UWP-应用设置
    2018-2-13-win10-UWP-你写我读
    2018-2-13-win10-UWP-九幽登录
  • 原文地址:https://www.cnblogs.com/cellular-automaton/p/7467364.html
Copyright © 2011-2022 走看看