Pagini recente » Cod sursa (job #742730) | Cod sursa (job #1946216) | Cod sursa (job #830570) | Cod sursa (job #1359166) | Cod sursa (job #3259225)
#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;
}