#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |