洛谷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 the index I of that cow.

FJ has made a list of R (0 ≤ R ≤ 10,000) lines of the form "cow 17 sees cow 34". This means that cow 34 is at least as tall as cow 17, and that every cow between 17 and 34 has a height that is strictly smaller than that of cow 17.

For each cow from 1..N, determine its maximum possible height, such that all of the information given is still correct. It is guaranteed that it is possible to satisfy all the constraints.

给出牛的可能最高身高,然后输入m组数据 a b,代表a,b可以相望,最后求所有牛的可能最高身高输出

输入输出格式

输入格式:

Line 1: Four space-separated integers: N, I, H and R

Lines 2..R+1: Two distinct space-separated integers A and B (1 ≤ A, B ≤ N), indicating that cow A can see cow B.

输出格式:

Lines 1..N: Line i contains the maximum possible height of cow i.

输入输出样例

输入样例#1:

9 3 5 5
1 3
5 3
4 3
3 7
9 8

输出样例#1:

5
4
5
3
4
4
5
5
5

代码:

 1 #include<cstdio>
 2 #include<map>
 3 #include<algorithm>
 4 using namespace std;
 5 const int N=10005;
 6
 7 int n,i,h,r,S[N],F[N];
 8 map<int,bool>Mp[N];
 9
10 void read(int &now)
11 {
12     now=0;char c=getchar();
13     while(c<‘0‘||c>‘9‘)c=getchar();
14     while(c>=‘0‘&&c<=‘9‘)now=(now<<3)+(now<<1)+c-‘0‘,c=getchar();
15 }
16
17 int main()
18 {
19     read(n);read(i);read(h);read(r);
20     while(r--)
21     {
22         int a,b;
23         read(a);read(b);
24         if(a>b) swap(a,b);
25         if(Mp[a][b])//判重,防止 5-3 和 3-5这种情况
26           continue;
27         Mp[a][b]=1;
28         --S[a+1];++S[b];//前缀和,该区间-1
29     }
30     for(int i=1;i<=n;++i)
31     {
32         F[i]=S[i]+F[i-1];
33         printf("%d\n",F[i]+h);
34     }
35     return 0;
36 }
时间: 2024-08-26 15:33:12

洛谷P2879 [USACO07JAN]区间统计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

传送门 题目大意: 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. 一开始我是用线段树做的,后来发现题解用的差分. 没有询问的区间修改,差分做就好了

[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 {前缀和,思维}

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

[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];

洛谷—— P2880 [USACO07JAN]平衡的阵容Balanced Lineup

https://www.luogu.org/problemnew/show/P2880 题目背景 题目描述: 每天,农夫 John 的N(1 <= N <= 50,000)头牛总是按同一序列排队. 有一天, John 决定让一些牛们玩一场飞盘比赛. 他准备找一群在对列中为置连续的牛来进行比赛. 但是为了避免水平悬殊,牛的身高不应该相差太大. John 准备了Q (1 <= Q <= 180,000) 个可能的牛的选择和所有牛的身高 (1 <= 身高 <= 1,000,0

洛谷 P3660 [USACO17FEB]Why Did the Cow Cross the Road III G(树状数组)

题目背景 给定长度为2N的序列,1~N各处现过2次,i第一次出现位置记为ai,第二次记为bi,求满足ai<aj<bi<bj的对数 题目描述 The layout of Farmer John's farm is quite peculiar, with a large circular road running around the perimeter of the main field on which his cows graze during the day. Every morn

洛谷 P2966 [USACO09DEC]牛收费路径Cow Toll Paths

题目描述 Like everyone else, FJ is always thinking up ways to increase his revenue. To this end, he has set up a series of tolls that the cows will pay when they traverse the cowpaths throughout the farm. The cows move from any of the N (1 <= N <= 250)

洛谷 【P1026】统计单词个数

P1026 统计单词个数 题目描述 给出一个长度不超过200的由小写英文字母组成的字母串(约定;该字串以每行20个字母的方式输入,且保证每行一定为20个).要求将此字母串分成k份(1<k<=40),且每份中包含的单词个数加起来总数最大(每份中包含的单词可以部分重叠.当选用一个单词之后,其第一个字母不能再用.例如字符串this中可包含this和is,选用this之后就不能包含th). 单词在给出的一个不超过6个单词的字典中. 要求输出最大的个数. 输入输出格式 输入格式: 每组的第一行有二个正整