Pagini recente » Cod sursa (job #144555) | Cod sursa (job #1247919) | Cod sursa (job #1605665) | Cod sursa (job #1752965) | Cod sursa (job #2063326)
#include <iostream>
#include <climits>
#include <fstream>
#define inf INT_MAX
using namespace std;
ifstream f("subsir2.in");
ofstream g("subsir2.out");
int a[5001],l[5001];
int main()
{
int n,i,mini,maxi,j;
f>>n;
for(i=1; i<=n; i++)
f>>a[i];
for(i=n; i>=1; i--)
{
for(j=i+1,mini=inf; j<=n; j++)
if(a[j]>=a[i]&&a[j]<mini)
{
mini=min(mini,a[j]);
l[i]=min(l[i],l[j]+1);
if(!l[i])l[i]=l[j]+1;
}
if(l[i]==0)l[i]=1;
}
for(i=1,mini=inf,maxi=inf; i<=n; i++)
{
if(a[i]<mini)
{
mini=a[i];
maxi=min(maxi,l[i]);
}
}
g<<maxi<<'\n';
int last=-inf,k,poz=0;
for(k=maxi; k>0; k--)
{
mini=inf;
maxi=inf;
for(i=poz+1; i<=n; i++)
if(l[i]==k&&a[i]>=last&&a[i]<mini)
{
poz=i;
mini=a[i];
}
else if(a[i]>=last&&a[i]<mini)mini=a[i];
cout<<poz<<" ";
last=a[poz];
}
return 0;
}