poj3263 Tallest cow---差分

题目链接:https://vjudge.net/problem/POJ-3263

题意:给出n头牛和最高的牛的身高h和位置,再给出一些关系,每个a,b表示位置在(a+1,b-1)中的牛,身高严格小于位置在a,b的牛。求最后每头牛的最高身高

可以每次把区间(a+1,b-1)内的数全部-1,最后每头牛的最高身高就是h+(减去多少个1)。由于是区间加减最后询问,所以可以用差分。注意如果一个区间出现过了就不用再减了

#include<cstdio>
#include<map>
#include<algorithm>
using namespace std;

const int N=1e4+10;
int c[N],d[N],n,p,h,i,r;
map<pair<int,int>,int> mp;

int main(){
	scanf("%d%d%d%d",&n,&p,&h,&r);
	for (i=1;i<=r;i++){
	  int a,b;
	  scanf("%d%d",&a,&b);
	  if (a>b) swap(a,b); 
	  if (mp[make_pair(a,b)]) continue;
	  mp[make_pair(a,b)]=1;
	  d[a+1]-=1; d[b]+=1;
	}
	for (i=1;i<=n;i++) c[i]=c[i-1]+d[i];
	for (i=1;i<=n;i++) printf("%d\n",h+c[i]);
	return 0;
}

  

posted @ 2020-09-12 17:39  coastal_taipan  阅读(124)  评论(0编辑  收藏  举报