Submission #1143756

#TimeUsernameProblemLanguageResultExecution timeMemory
11437560pt1mus23Volontiranje (COCI21_volontiranje)C++20
0 / 110
0 ms320 KiB
#include <bits/stdc++.h> using namespace std; #define int long long int #define ins insert #define pb push_back #define endl '\n' #define all(x) x.begin(),x.end() const int mod = 998244353; const int inf = LLONG_MAX; const int LG = 23; const int sze = 2e5+23; struct segtree{ vector<int> T; segtree(int n){ T.resize(4*n,0); } void upd(int node,int idx,int l,int r,int v){ if(l==r){ T[node]=v; return; } int mid = (l+r)/2; if(idx<=mid) upd(2*node,idx,l,mid,v); else upd(2*node +1,idx,mid+1,r,v); T[node]=max(T[node*2],T[node *2+1]); } int qry(int node,int l,int r,int lx,int rx){ if(lx>r || rx<l) return 0; if(lx>=l && rx<=r) return T[node]; return max( qry(2*node,l,r,lx,(lx+rx)/2), qry(2*node +1,l,r,(lx+rx)/2 +1, rx) ); } }; void fast(){ int n; cin>>n; vector<int> arr(n); for(int i=0;i<n;i++){ cin>>arr[i]; } segtree st(n+23); for(int i=0;i<n;i++){ st.upd(1,arr[i],1,n,st.qry(1,0,arr[i]-1,1,n)+1); } int K = st.T[1]; vector<vector<int>> res; vector<int> par(n+23,inf); multiset<pair<int,int>> abi; // last el,length for(int i=0;i<n+23;i++){ abi.ins({inf,0}); } if(K>1){ for(int i = n-1;i>=0;i--){ int x = arr[i]; auto it = abi.upper_bound({x,0}); auto lan = *it; abi.erase(it); par[arr[i]] = lan.first; lan.first = arr[i]; lan.second++; // cout<<lan.first<<" "<<lan.second<<endl; if(lan.second !=K ){ abi.ins(lan); } } for(int i = 0;i<n;i++){ if(par[arr[i]]==inf){ continue; } vector<int> lan; int u = arr[i]; while(u!=inf){ lan.pb(u); // cout<<u<<endl; u =par[u]; } for(auto v:lan){ par[v]=inf; } res.pb(lan); } } else{ for(int i=1;i<=n;i++){ res.pb({i}); } } vector<int> yer(n+23); for(int i=1;i<=n;i++){ yer[arr[i-1]]=i; } cout<<res.size()<<" "<<K<<endl; for(auto v:res){ for(auto x:v){ cout<<yer[x]<<" "; } cout<<endl; } } signed main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int tt =1; // cin>>tt; while(tt--){ fast(); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...