Pagini recente » Monitorul de evaluare | Istoria paginii runda/aplicatii | Istoria paginii articole | Cod sursa (job #821649) | Cod sursa (job #2022231)
#include <iostream>
#include <fstream>
using namespace std;
int best[5005],nxt[5005],v[5005];
int i,j,n,mn;
int main()
{
ifstream f("subsir2.in");
ofstream g("subsir2.out");
f>>n;
for(i=1;i<=n;i++)
f>>v[i];
v[0]=-(1<<30);
for(i=n;i>=0;i--)
{
mn=(1<<30);best[i]=(1<<30);
for(j=i+1;j<=n;j++)
{
if(best[j]<=best[i]&&v[j]<mn&&v[j]>=v[i])
best[i]=best[j],nxt[i]=j;
if(v[j]<mn&&v[j]>=v[i])
mn=v[j];
}
if(!nxt[i])
nxt[i]=n+1,best[i]=0;
best[i]++;
}
g<<best[0]-1<<'\n';
i=0;
while(i<=n)
{
if(nxt[i]<=n) g<<nxt[i]<<' ';
i=nxt[i];
}
return 0;
}