Pagini recente » Cod sursa (job #1619721) | Cod sursa (job #1818881) | Algoritmiada 2012 - Regulament | Cod sursa (job #2857850) | 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]<<' ';
}