记录编号 583007 评测结果 AAAAAAAAAA
题目名称 [省选 2023]火车站 最终得分 100
用户昵称 Gravatar┭┮﹏┭┮ 是否通过 通过
代码语言 C++ 运行时间 0.568 s
提交时间 2023-10-03 14:59:05 内存使用 8.36 MiB
显示代码纯文本
#include <bits/stdc++.h> 
using namespace std;
const int N = 2e5+10;
int n,m,k;
struct made{
    int l,r;
}a[N];
int l = INT_MAX,r;//大区间 
int ans[2*N],tot;
bool cmp(made x,made y){
    if(x.l == y.l)return x.r < y.r;
    return x.l < y.l;
}
int main(){//模拟 
    freopen("station.in","r",stdin);
    freopen("station.out","w",stdout);
    scanf("%d%d%d",&n,&m,&k);
    l = r = k;
    for(int i = 1;i <= m;i++){
        scanf("%d%d",&a[i].l,&a[i].r);
        if(a[i].l <= k && a[i].r >= k){
            l = min(l,a[i].l),r = max(r,a[i].r);
            ans[++tot] = a[i].l;
            ans[++tot] = a[i].r;//答案数组 
        }
    }//大区间 
    sort(a+1,a+1+m,cmp);//排序 
    int l1 = k,r1 = r;
    for(int i = 1;i <= m;i++){
        if(a[i].l <= r1 && a[i].r >= l1){
            r1 = max(r1,a[i].r);
            ans[++tot] = a[i].r;
        }
    }//向右走 
    l1 = l,r1 = k;
    for(int i = m;i >= 1;i--){
        if(a[i].l <= r1 && a[i].r >= l1){
            l1 = min(l1,a[i].l);
            ans[++tot] = a[i].l;
        }
    }//向左走 
    sort(ans+1,ans+1+tot);
    int m = unique(ans+1,ans+1+tot) - (ans+1);//给答案排序去重 
    for(int i = 1;i <= m;i++)
        if(ans[i] != k)printf("%d ",ans[i]);
        //因为火车应运行至少一个车站,所以不能为k 
    printf("\n");
    
    return 0;
    
}