# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1019435 | TAhmed33 | Volontiranje (COCI21_volontiranje) | C++98 | 13 ms | 23900 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN = 1e6 + 25;
int p[MAXN], n;
int cur[MAXN];
vector <int> dd[MAXN];
void solve () {
cin >> n;
cur[0] = -MAXN;
for (int i = 1; i <= n; i++) {
cin >> p[i];
cur[i] = MAXN;
}
int v = 0;
for (int i = 1; i <= n; i++) {
int g = upper_bound(cur, cur + n + 1, p[i]) - cur;
dd[g].push_back(i);
cur[g] = p[i];
v = max(v, g);
}
for (int i = 1; i <= v; i++) {
reverse(dd[i].begin(), dd[i].end());
}
vector <vector <int>> ans;
while (true) {
if (dd[1].empty()) {
break;
}
bool f = 0;
for (int i = 2; i <= v; i++) {
while (!dd[i].empty() && dd[i].back() < dd[i - 1].back()) {
dd[i].pop_back();
}
if (dd[i].empty()) {
f = 1;
break;
}
if (p[dd[i].back()] < p[dd[i - 1].back()]) {
dd[i - 1].pop_back();
i--;
}
}
if (f) {
break;
}
vector <int> gg;
for (int i = 1; i <= v; i++) {
if (dd[i].empty()) {
f = 1;
break;
}
gg.push_back(dd[i].back());
dd[i].pop_back();
}
if (f) {
break;
}
ans.push_back(gg);
}
cout << int(ans.size()) << ' ' << v << '\n';
for (auto i : ans) {
for (auto j : i) {
cout << j << " ";
}
cout << '\n';
}
}
signed main () {
#ifndef ONLINE_JUDGE
freopen("input_file", "r", stdin);
freopen("output_file", "w", stdout);
#endif
ios::sync_with_stdio(0); cin.tie(0);
int tc = 1; //cin >> tc;
while (tc--) solve();
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |