题目链接:Problem - C - Codeforces
题目描述:
输入描述:
输出描述:
样例及解释:
题意:
给定一个数组,求出字典序最大的nex数组
思路:
我们先处理出一个后缀nex数组
定义p = 0;当pj的nex 等于p(n - 1)的nex的时候这个nex就是最大的nex。更新p
#include<bits/stdc++.h>
using namespace std;
#define endl "\n"
#define IOS ios::sync_with_stdio(false)
int arr[200005];
map<int, int> mp;
int nex[200005];
vector<int> ve;
int main(){
IOS;
int t;
cin >> t;
while(t--){
ve.clear();
int n;
cin >> n;
int a = 0;
for(int i = 0; i < n; i++){
cin >> arr[i];
}
for(int i = n - 1; i >= 0; i--){
mp[arr[i]] = 1;
while(mp[a]){
a++;
}
nex[i] = a;
}
mp.clear();
int p = 0;
while(p < n){
a = 0;
for(int j = p; j < n; j++){
mp[arr[j]] = 1;
while(mp[a]){
a++;
}
if(a == nex[p]){
p = j + 1;
ve.push_back(a);
mp.clear();
break;
}
}
}
cout << ve.size() << endl;
for(int i = 0; i < ve.size(); i++){
if(i != 0){
cout << " ";
}
cout << ve[i];
}
cout << endl;
}
return 0;
}