A
因为是按顺序染色,所以把每个颜色出现的左端点和右端点记录下来
没有出现的藏在下一个颜色下面
#include <bits/stdc++.h>
using namespace std;
#define pi pair<int, int>
const int maxn = 1e5 + 5;
int l[maxn], r[maxn];
pi ans[maxn];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int n, m;
cin >> n >> m;
int L, R;
for(int i = 1; i <= n; ++i) {
int x;
cin >> x;
if(l[x] == 0) l[x] = r[x] = i;
else r[x] = i;
}
for(int i = m; i >= 1; --i) {
if(l[i] == 0) ans[i] = ans[i + 1];
else ans[i] = pi(l[i], r[i]);
}
for(int i = 1; i <= m; ++i) {
cout << ans[i].first << " " << ans[i].second << endl;
}
}
C
https://blog.youkuaiyun.com/weixin_40588429/article/details/89811191