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;
}

浙公网安备 33010602011771号