题目链接: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 ",h+c[i]); return 0; }