比赛 省选 2023 Day1 复现 评测结果 AAAAAAAAAA
题目名称 火车站 最终得分 100
用户昵称 终焉折枝 运行时间 0.515 s
代码语言 C++ 内存使用 4.50 MiB
提交时间 2026-03-02 10:30:45
显示代码纯文本
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

const int MAXN = 2 * 1e5 + 5;
struct sta{
	int l, r;
}s[MAXN];
int n, m, x, t1 = 0, t2 = 0;
bool vis[MAXN];
vector<int> ans;
bool cmp(sta x, sta y){
	return x.l < y.l;
}
bool cmp2(sta x, sta y){
	return x.r > y.r;
}

int main(){
	freopen("station.in", "r", stdin);
	freopen("station.out", "w", stdout);
	cin.tie(0) -> ios::sync_with_stdio(0);
	cin >> n >> m >> x;
	for(int i = 1;i <= m;i ++){
		cin >> s[i].l >> s[i].r;
	}
	sort(s + 1, s + m + 1, cmp);
	bool flag = 0;
	int maxr = x;
	for(int i = 1;i <= m;i ++){
		if(s[i].l <= x && x <= s[i].r){
			maxr = max(maxr, s[i].r);
		}
	}
	for(int i = 1;i <= m;i ++){
		int l = s[i].l, r = s[i].r;
		if(l <= maxr && r >= x){
			if(vis[r]) continue;
			ans.push_back(r);
			vis[r] = 1;
			maxr = max(maxr, r);
		}
	}
	sort(s + 1, s + m + 1, cmp2);
	int maxl = x;
	for(int i = 1;i <= m;i ++){
		if(s[i].l <= x && x <= s[i].r){
			maxl = min(maxl, s[i].l);
		}
	}
	for(int i = 1;i <= m;i ++){
		int l = s[i].l, r = s[i].r;
		if(r >= maxl && l <= x){
//			cout << l << ' ' << r << '\n';
			if(vis[l]) continue;
			ans.push_back(l);
			vis[l] = 1;
			maxl = min(maxl, l);
		}
	}
	sort(ans.begin(), ans.end());
	int lst = -1;
	for(int q : ans){
		if(q == x || x == lst) continue;
		cout << q << ' ';
		lst = q;
	}
	return 0;
}