90 tps #10 求调
#include<bits/stdc++.h>
using namespace std;
int n,p,h,m;
int num[5010];
struct cow{
int a,b;
}c[5010];
bool cmp(cow x,cow y){
if(x.a==y.a) return x.b>y.b;
else return x.a<y.a;
}
int main(){
memset(num,-1,sizeof num);
scanf("%d%d%d%d",&n,&p,&h,&m);
num[p]=h;
for(int i=1;i<=m;i++){
scanf("%d%d",&c[i].a,&c[i].b);
if(c[i].a>c[i].b) swap(c[i].a,c[i].b);
}
sort(c+1,c+1+m,cmp);
// for(int i=1;i<=m;i++){
// printf("%d %d\n",c[i].a,c[i].b);
// }
for(int j=1;j<=m;j++){
if(num[c[j].a]!=-1&&num[c[j].b]!=-1){
int tmp=min(num[c[j].a],num[c[j].b]);
for(int i=c[j].a+1;i<c[j].b;i++){
num[i]=tmp-1;
}
}else if(num[c[j].a]==-1&&num[c[j].b]==-1){
num[c[j].a]=num[c[j].b]=h;
int tmp=min(num[c[j].a],num[c[j].b]);
for(int i=c[j].a+1;i<c[j].b;i++){
num[i]=tmp-1;
}
}else{
if(num[c[j].a]!=-1){
num[c[j].b]=h;
}else{
num[c[j].a]=h;
}
int tmp=min(num[c[j].a],num[c[j].b]);
for(int i=c[j].a+1;i<c[j].b;i++){
num[i]=tmp-1;
}
}
}
for(int i=1;i<=n;i++){
if(num[i]==-1) num[i]=h;
printf("%d\n",num[i]);
}
return 0;
}