제출 #1198053

#제출 시각아이디문제언어결과실행 시간메모리
1198053brover29Volontiranje (COCI21_volontiranje)C++17
50 / 110
1093 ms1048 KiB
#include <bits/stdc++.h>
//qwerty47924692
using namespace std;
using ll = long long;
const ll N=2e5+29;
const string br="617283";
#define sz(a)(ll)a.size()
#define f first
#define s second
ll n,k,dp[N],pr[N],a[N];
vector<vector<ll>>v;
ll mx=0;
bool get(){
    ll cur=0;
    for(ll i=1;i<=n;i++){
        dp[i]=-1e18;
        if(a[i]==-1e18)continue;
        dp[i]=1;
        pr[i]=0;
        for(ll j=1;j<i;j++){
            if(a[j]<a[i]){
                if(dp[i]<=dp[j]+1){
                    dp[i]=dp[j]+1;
                    pr[i]=j;
                }
            }
        }cur=max(cur,dp[i]);
    }vector<ll>b;
    if(cur!=mx)return 0;
    for(ll i=n;i>=1;i--){
        if(dp[i]==cur){
            while(i!=0){
                b.push_back(i);
                a[i]=-1e18;
                i=pr[i];
            }
            v.push_back(b);
            break;
        }
    }
    return 1;

}
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    cin>>n;
    for(ll i=1;i<=n;i++){
        cin>>a[i];
        dp[i]=1;
        for(ll j=1;j<i;j++){
            if(a[j]<a[i]){
                if(dp[i]<=dp[j]+1){
                    dp[i]=dp[j]+1;
                    pr[i]=j;
                }
            }
        }
        mx=max(mx,dp[i]);
    }
    while(get()){
        continue;
    }cout<<v.size()<<' '<<mx<<'\n';
    for(auto vv:v){
        reverse(vv.begin(),vv.end());
        for(ll i:vv){
            cout<<i<<' ';
        }
        cout<<'\n';
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...