90 tps #10 求调
查看原帖
90 tps #10 求调
738882
OIer_dcy__AK_IOI楼主2024/10/24 20:58

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;
}
2024/10/24 20:58
加载中...