Pagini recente » Cod sursa (job #1617207) | Istoria paginii runda/manelecudedicatie | Cod sursa (job #1783498) | Cod sursa (job #409714) | Cod sursa (job #1771566)
#include <iostream>
#include <fstream>
using namespace std;
#define nmax 5100
ifstream fin("subsir2.in");
ofstream fout("subsir2.out");
int v[nmax];
int q[nmax];
int dp[nmax];
int ans[nmax];
int n,i,s,d,p,l,m;
int main()
{
fin>>n;
v[0]=1000000000;
for(i=1; i<=n; ++i)
{
fin>>v[i];
s=1;
d=l;
p=0;
while(s<=d)
{
m=(s+d)/2;
if(v[i]>=v[q[m]])
s=m+1,p=m;
else
d=m-1;
}
if(p+1>l)
++l;
q[p+1]=i;
dp[i]=p+1;
}
for(i=1; i<=n; ++i)
if(v[i]<v[ans[dp[i]]])
ans[dp[i]]=i;
fout<<l<<'\n';
for(i=1; i<=l; ++i)
fout<<ans[i]<<' ';
}