首页 > 其他分享 >Acwing -101 最高的牛(差分)

Acwing -101 最高的牛(差分)

时间:2023-02-17 17:34:26浏览次数:38  
标签:输出 101 头牛 int 差分 整数 include 身高 Acwing


有 NN 头牛站成一行,被编队为1、2、3…N,每头牛的身高都为整数。

当且仅当两头牛中间的牛身高都比它们矮时,两头牛方可看到对方。

现在,我们只知道其中最高的牛是第 P 头,它的身高是H ,剩余牛的身高未知。

但是,我们还知道这群牛之中存在着 M 对关系,每对关系都指明了某两头牛 A 和 B 可以相互看见。

求每头牛的身高的最大可能值是多少。

输入格式

第一行输入整数N,P,H,M,数据用空格隔开。

接下来M行,每行输出两个整数 A 和 B ,代表牛 A 和牛 B 可以相互看见,数据用空格隔开。

输出格式

一共输出 NN 行数据,每行输出一个整数。

第 ii 行输出的整数代表第 ii 头牛可能的最大身高。

数据范围

1≤N≤10000
1≤H≤1000000,
1≤A,B≤10000
0≤M≤100000

输入样例:

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

输出样例:

5
4
5
3
4
4
5
5
5

注意:

  • 此题中给出的关系对可能存在重复

题解: 这也是一道差分的题目 ,  给了一个最高的牛的身高 , 给出两个牛之间可以相互看见, 把这两个牛之间的每个牛的身高减一,

当然还需要判一下重关系 . 

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <set>
#pragma GCC optimize(2)
#include <cmath>
#define pi 3.141592654
using namespace std ;
const int MAX = 100010 ;
typedef long long LL ;

int d[MAX] ;

int main(){

int N ,P ,H ,M ;
cin >>N>>P >>H>>M ;
d[1] = H ;
// d[1] = H , 相当于原数组都是 H
set<pair<int,int> > exited ;
for(int i = 1 ; i<=M; i++ ) {
int x , y ;
cin >>x >>y ;
if(x>y){
swap(x,y) ;
}
if(!exited.count(make_pair(x,y))){
exited.insert(make_pair(x,y));
//每次把 [x+1 , y-1] 这一段减去已一, 因为这里面的数全都小于
// 端点的身高
d[x+1]-- ;
d[y]++ ;
}

}
for(int i = 1 ; i<=N ; i++ ){
d[i]+=d[i-1] ;
cout<<d[i]<<endl;
}



return 0 ;
}

 

标签:输出,101,头牛,int,差分,整数,include,身高,Acwing
From: https://blog.51cto.com/u_15970235/6064428

相关文章