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...