Submission #1186638

#TimeUsernameProblemLanguageResultExecution timeMemory
1186638ezzzayVolontiranje (COCI21_volontiranje)C++20
0 / 110
3 ms7240 KiB
#include<bits/stdc++.h> using namespace std; #define int long long #define ff first #define ss second #define pb push_back const int N=3e5+5; int a[N]; int dp[N]; vector<pair<int,int> > v[N]; signed main(){ int n; cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; } int mx=0; for(int i=1;i<=n;i++){ dp[i]=1; for(int j=1;j<i;j++){ if(a[i]>a[j])dp[i]=max(dp[i],dp[j]+1); } v[dp[i]].pb({a[i],i}); mx=max(mx,dp[i]); } for(int i=1;i<=mx;i++){ sort(v[i].begin(),v[i].end()); reverse(v[i].begin(),v[i].end()); } vector<vector<pair<int,int>>>ans; while(!v[mx].empty()){ auto [x,idx] =v[mx].back(); vector<pair<int,int>>tmp={{x,idx}}; v[mx].pop_back(); int u=1; for(int i=mx-1;i>=1;i--){ pair<int,int>kk={1e9,1e9}; for(auto p:v[i]){ if(p.ss<idx and p.ff<x){ kk=min(kk,p); } } x=kk.ff;idx=kk.ss; if(idx==1e9)u=0; tmp.pb({x,idx}); } if(u==0)continue; reverse(tmp.begin(),tmp.end()); ans.pb(tmp); for(int i=1;i<mx;i++){ auto it = find(v[i].begin(), v[i].end(),tmp[i-1]); if (it != v[i].end()) { v[i].erase(it); } } } cout<<ans.size()<<" "<<ans[0].size()<<endl; for(auto v:ans){ for(auto p:v)cout<<p.ss<<" "; cout<<endl; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...