本文主要是介绍Tallest Cow(差分的应用),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 题目描述
- 思考
- AC代码:
题目描述
题目链接:
https://ac.nowcoder.com/acm/contest/999/C
题意:
n头奶牛,告诉你最高的那头是第I头和它的高度H,以及R组两头互相看见的牛 A i A_i Ai和 B i B_i Bi,其中两条牛能互相看见的条件是它们中间的牛都小于它们两个的高度;求n个牛的最大高度。
思考
要让两头牛互相能看见,需要将两头牛中间的牛的高度都减一。
利用差分记录相对高度,起始全为0,由于C[i]最高,所以一定为0;
注意去重!
也许有些细心的小伙伴想到了这个情况,但是其实是不成立的,首先A能看见B,即C<B,其次C能看见D,即C>B,矛盾
AC代码:
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include<stdio.h>
#include<math.h>
#include<map>
#include <utility>
#define Inf 1000000
using namespace std;map<pair<int,int>,bool> ex;
int d[1000010],c[1000100];int main(){int n,i,h,r;cin>>n>>i>>h>>r;while(r--){int x,y;cin>>x>>y;if(x>y) swap(x,y);if(ex[make_pair(x,y)]) continue;d[x+1]--,d[y]++;ex[make_pair(x,y)]=true;}for(int i=1;i<=n;i++){c[i]=c[i-1]+d[i];cout<<c[i]+h<<endl;}
}
这篇关于Tallest Cow(差分的应用)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!