前缀和水题。因为求最优所以默认最大,每次给出了一对关系,我们都可以知道中间的数要小。前缀和处理一下即可。
#include<iostream>
#include<map>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
map<pair<int,int>,bool> mp;
int s[101000],c[101000],n,h,l,r;
int main() {
scanf("%d%d%d%d",&n,&l,&h,&r);
for (int i=1;i<=r;i++) {
int x,y;scanf("%d%d",&x,&y);
if (x>y) swap(x,y);
if (mp[make_pair(x,y)]) continue;
mp[make_pair(x,y)]=true;
c[x+1]++;c[y]--;
}
for (int i=1;i<=n;i++) printf("%d\n",h-(c[i]=c[i-1]+c[i]));
return 0;
}