Cod sursa(job #3259225)

Utilizator BiceaToader David Stefan Bicea Data 25 noiembrie 2024 16:20:58
Problema Subsir 2 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("subsir2.in");
ofstream g("subsir2.out");
int n,v[5003],a[5003][5003],l,lmax,ales,ok,erau[5003],indice[5003][5003];
int main() //lungime maxima si lexicografic cel mai mic si sa nu mai poti pune alte numere in sir subsir
{f>>n;
for(int i=1;i<=n;++i)
    cin>>v[i];
    a[1][1]=v[1];
    indice[1][1]=1;
    l=1;
for(int i=2;i<=n;++i)
{
   ok=1;
   for(int k=1;k<=l;++k)
    {a[i][k]=a[i-1][k];
    indice[i][k]=indice[i-1][k];
    }
   while(l && ok)
   {
       if(a[i][l]<=v[i])
       {
           ok=0;
           a[i][++l]=v[i];
           indice[i][l]=i;
       }
       else
        l--;
   }
   if(!l)
    {a[i][++l]=v[i];
    indice[i][l]=v[i];
    }
   // for(int k=1;k<=l;++k)
       // cout<<a[i][k]<<" ";
   // cout<<'\n';
}
for(int i=1;i<=n-1;++i)
{
    for(int j=i+1;j<=n;++j)
    {
    if(v[j]>v[i])
    {
        erau[i]=1;
        break;
    }
    }
}
ales=1;
lmax=1;
for(int i=n;i>=1;--i)
{
    if(!erau[i])
        if(l>lmax)
    {
        lmax=l;
        ales=i;
    }
}
g<<lmax<<'\n';
for(int i=1;i<=lmax;++i)
    g<<indice[ales][i]<<" ";
    return 0;
}