[Luogu] 区间统计Tallest Cow

https://www.luogu.org/problemnew/show/P2879

差分 | 线段树

#include <iostream>
#include <cstdio>
#include <algorithm>

using namespace std;
const int N = 1e4 + 10;

#define gc getchar()

struct Node {int l, r;}A[N];
int n, my, Maxh, R;
int H[N];

inline int read() {
    int x = 0; char c = gc;
    while(c < ‘0‘ || c > ‘9‘) c = gc;
    while(c >= ‘0‘ && c <= ‘9‘) x = x * 10 + c - ‘0‘, c = gc;
    return x;
}

inline bool cmp(Node a, Node b) {
    return a.l == b.l ? a.r < b.r : a.l < b.l;
}

int main() {
    n = read();
    my = read();
    Maxh = read();
    R = read();
    for(int i = 1; i <= R; i ++) {
        int one = read(), tow = read();
        A[i].l = min(one, tow);
        A[i].r = max(one, tow);
    }
    sort(A + 1, A + R + 1, cmp);
    H[A[1].l + 1] += 1;
    H[A[1].r] -= 1;
    for(int i = 2; i <= R; i ++) {
        if(A[i].l == A[i - 1].l && A[i].r == A[i - 1].r) continue ;
        H[A[i].l + 1] += 1;
        H[A[i].r] -= 1;
    }
    int tmp = 0;
    for(int i = 1; i <= n; i ++) {
        tmp += H[i];
        cout << Maxh - tmp << endl;
    }
    return 0;
}

原文地址:https://www.cnblogs.com/shandongs1/p/8455213.html

时间: 2024-11-05 06:26:38

[Luogu] 区间统计Tallest Cow的相关文章

洛谷 P2879 [USACO07JAN]区间统计Tallest Cow 题解

此文为博主原创题解,转载时请通知博主,并把原文链接放在正文醒目位置. 题目链接:https://www.luogu.org/problem/show?pid=2879 题目描述 FJ's N (1 ≤ N ≤ 10,000) cows conveniently indexed 1..N are standing in a line. Each cow has a positive integer height (which is a bit of secret). You are told on

洛谷P2879 [USACO07JAN]区间统计Tallest Cow

To 洛谷.2879 区间统计 题目描述 FJ's N (1 ≤ N ≤ 10,000) cows conveniently indexed 1..N are standing in a line. Each cow has a positive integer height (which is a bit of secret). You are told only the height H (1 ≤ H ≤ 1,000,000) of the tallest cow along with th

[USACO07JAN]区间统计Tallest Cow

题目描述 FJ's N (1 ≤ N ≤ 10,000) cows conveniently indexed 1..N are standing in a line. Each cow has a positive integer height (which is a bit of secret). You are told only the height H (1 ≤ H ≤ 1,000,000) of the tallest cow along with the index I of tha

洛谷 P2879 [USACO07JAN]区间统计Tallest Cow

传送门 题目大意: n头牛,其中最高身高为h,给出r对关系(x,y) 表示x能看到y,当且仅当y>=x并且x和y中间的牛都比 他们矮的时候,求每头牛的最高身高. 题解:贪心+差分 将每头牛一开始都设为最高高度. 每一对关系(x,y),我们将[x+1,y-1]这个区间的身高变为 min(x,y)-1.这样是不对了.因为要维护[x+1,y-1]这个区间里 各个元素的大小关系,所以要将[x+1,y-1]的元素身高都减1. 一开始我是用线段树做的,后来发现题解用的差分. 没有询问的区间修改,差分做就好了

【P2879】 [USACO07JAN]区间统计Tallest Cow {前缀和,思维}

思路: 先初始化所有牛的身高为0. 对于每一个约束条件(a,b)我们将a+1 ~ b-1的牛的身高全部减一. 朴素的减是TLE的,所以我们维护一个前缀和数组d[]来搞,对于约束条件(a,b)我们将d[a+1]--,将d[b]++. 碎碎念: 这个思路很明白,但是为什么是正确的(尤其是为什么每次减一不会产生矛盾)?我把luogu的题解浏览了一遍也没有看到证明. 所以我就自己证了一下.有两种证明方法: 一是循环不变式(算法导论上有很漂亮的例子),证起来很清晰. 二是反证法:假设有一组约束条件必须减>

POJ3263 Tallest Cow

Tallest Cow Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 2368   Accepted: 1084 Description FJ's N (1 ≤ N ≤ 10,000) cows conveniently indexed 1..N are standing in a line. Each cow has a positive integer height (which is a bit of secret

Tallest Cow(线段树较易)

题目描述 FJ's N (1 ≤ N ≤ 10,000) cows conveniently indexed 1..N are standing in a line. Each cow has a positive integer height (which is a bit of secret). You are told only the height H (1 ≤ H ≤ 1,000,000) of the tallest cow along with the index I of tha

Tallest Cow(POJ3263)

Tallest Cow(POJ3263) 给出N头牛的身高,和M对关系(ai与bi可以相互看见.即他们中间的牛都比他们矮).已知最高的牛为第P头,身高为H.求每头牛的身高最大可能是多少.( \(1 \leq N,M \leq 10^4, 1 \leq H \leq 10^6\) ) 输入样例: 9 3 5 5 1 3 5 3 4 3 3 7 9 8 输出样例: 5 4 5 3 4 4 5 5 5 分析: 朴素解法:数组C初始化0 ,ai与bi之间的数减一 最后设C[P] = 0 即Hi = H+

poj 3263 Tallest Cow(线段树)

Language: Default Tallest Cow Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 1964   Accepted: 906 Description FJ's N (1 ≤ N ≤ 10,000) cows conveniently indexed 1..N are standing in a line. Each cow has a positive integer height (which i