Submission #1185531

#TimeUsernameProblemLanguageResultExecution timeMemory
1185531EsgeerVolontiranje (COCI21_volontiranje)C++20
10 / 110
1 ms328 KiB
#include <bits/stdc++.h> #define int long long #pragma GCC optimize("O3") #define vi vector<int> #define vb vector<bool> #define F(i, s, e) for(int i = s; i < e; i++) #define sp <<' '<< #define pii pair<int, int> #define fi first #define se second #define pb push_back #define vvi vector<vi> #define vpi vector<pii> #define vvpi vector<vpi> #define endl '\n' const int mod = 1e9 + 7; using namespace std; const int inf = 1e15; const int K = 12; const int N = 1ll << K; bitset<K> have; void solve() { int n; cin >> n; vi a(n), dp(n); F(i, 0, n) cin >> a[i]; vi lis; F(i, 0, n) { auto ptr = lower_bound(lis.begin(), lis.end(), a[i]); if(ptr == lis.end()) { lis.push_back(a[i]); dp[i] = lis.size(); } else { *ptr = a[i]; dp[i] = ptr - lis.begin() + 1; } } vvi stacks(n+1); F(i, 0, n) { stacks[dp[i]].pb(i); } int l = lis.size(); vvi ans; while(!stacks[l].empty()) { int me = stacks[l].back(); vi curs; int curl = dp[me]; stacks[l].pop_back(); bool flag = 1; curs.pb(me); while(dp[me] > 1) { while(stacks[curl-1].size() && stacks[curl-1].back() >= me) stacks[curl-1].pop_back(); if(stacks[curl-1].size() && a[stacks[curl-1].back()] < a[me]) { me = stacks[curl-1].back(); stacks[curl-1].pop_back(); curl = dp[me]; curs.pb(me); } else { flag = 0; break; } } if(flag) ans.pb(curs); } cout << ans.size() sp l << endl; for(auto &anss : ans) { for(int i = anss.size() - 1; i >= 0; i--) cout << anss[i]+1 << " "; cout << endl; } } int32_t main() { cin.tie(0); ios_base::sync_with_stdio(0); #ifdef Local freopen("in.txt", "r", stdin); freopen("out.txt", "w", stdout); #endif int t = 1; //cin >> t; while(t--) solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...