Pagini recente » Cod sursa (job #3278794) | Cod sursa (job #748753) | Cod sursa (job #1672423) | Cod sursa (job #1399988) | Cod sursa (job #2421913)
#include <bits/stdc++.h>
using namespace std;
ifstream in("subsir2.in");
ofstream out("subsir2.out");
int v[5005];
int r[5005];
int poz[5005];
int sol[5005];
int cnt;
int n;
int st, dr, mijl ;
int lmax;
int main()
{
in>>n;
for (int i = 1; i <= n; ++i) in>>v[i];
for (int i = 1; i <= n; ++i)
{
st = 1;
dr = lmax;
while(st <= dr)
{
mijl = (st+dr) / 2;
if(v[r[mijl]] <= v[i])
st = mijl + 1;
else
dr = mijl - 1;
}
r[st] = i;
lmax = max(lmax,st);
poz[i] = r[st - 1];
}
out<<lmax<<"\n";
int k = r[lmax];
//sol[++cnt] = k;
for(int i = 1; i <= lmax; ++i)
{
r[i] = v[k];
sol[++cnt] = k;
k = poz[k];
}
//for(int i = lmax; i >= 1; i--) cout<<r[i]<<" ";
for (int i = cnt;i >= 1; --i)
out<<sol[i]<<" ";
return 0;
}