码迷,mamicode.com
首页 > 其他好文 > 详细

【2017.10.28】noip赛前集训 | T1 【差分】

时间:2017-10-28 20:27:51      阅读:98      评论:0      收藏:0      [点我收藏+]

标签:nod   接下来   img   class   com   tor   两种   lap   can   

T1 

【题目描述】

(求区间叠加最大数)有 n 头牛,每头牛有个喝水时间,这段时间它将 . 独 . 占一个 Stall。现在给出每头牛 的喝水时间段,问至少要多少个 Stall 才能满足它们的要求。

 

【输入格式】

第一行一个正整数 n。 接下来 n 行每行两个正整数 a,b,表示每头牛的喝水时间段

 对于 100% 的数据,1≤n≤50000, 1≤ a ≤ b ≤106

 

【题解】

以下两种代码的思路是一样的,只是实现方式不同,第一种更加简洁吧(大概 )。

①注意:排序时,对于值相同的点,右端点排在前面。

技术分享
#include <cstdio>
#include <algorithm>

const int MAXN = 1e7 + 7;

int n, cnt = 1, ans, maxn;

struct Node {
    int value, pos;
    bool operator < (Node c) {
        if (value != c.value) return value < c.value;
        else return pos < c.pos;
    }
} node[MAXN];

int main() {
    freopen("a.in", "r", stdin);
    freopen("a.out", "w", stdout);
    
    scanf("%d", &n);
    
    for (int i = 1; i <= n; i++) {
        scanf("%d%d", &node[cnt].value, &node[cnt + 1].value);
        node[cnt + 1].value++;                                    // 将它延后一个是为了避免无法解决  |___|___|
        node[cnt].pos = 1, node[cnt + 1].pos = -1;                // 【接上一行】(前一个区间的右端点与后一个的左端点重合)的情况 
        cnt += 2;
    }
    
    std::sort(node + 1, node + 2 * n + 1);
    
//    for (int i = 1; i <= 2 * n; i++) {
//        printf("%d: %d %d\n", i, node[i].pos, node[i].value);
//    }
    
    for (int i = 1; i <= 2 * n; i++) {
        ans += node[i].pos;
        if (maxn < ans) maxn = ans; 
    }
    
    printf("%d\n", maxn);
    return 0;
} 
View Code

 

 ②

技术分享
#include <cstdio>

const int MAXN = 1e7 + 7;

int n, a[MAXN], maxn, ans, re, x, y;

int main() {
    freopen("a.in", "r", stdin);
    freopen("a.out", "w", stdout);
    
    scanf("%d", &n);
    
    for (int i = 1; i <= n; i++) {
        scanf("%d%d", &x, &y);
        if (y > maxn) maxn = y;
        a[x]++;
        a[y + 1]--;
    }
    
    for (int i = 1; i <= maxn + 1; i++) {
        re += a[i];
        if (re > ans) ans = re; 
    }
    
    printf("%d\n", ans);
    
    return 0;
}
View Code

 

【2017.10.28】noip赛前集训 | T1 【差分】

标签:nod   接下来   img   class   com   tor   两种   lap   can   

原文地址:http://www.cnblogs.com/ExileValley/p/7747834.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!