前綴和水題。因爲求最優所以默認最大,每次給出了一對關係,我們都可以知道中間的數要小。前綴和處理一下即可。
#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;
}