Pagini recente » Cod sursa (job #2166536) | Cod sursa (job #2573208) | Cod sursa (job #3254050) | Cod sursa (job #2270364) | Cod sursa (job #762054)
Cod sursa(job #762054)
#include<fstream>
#define nmax 100009
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int N, b[nmax], v[nmax], t[nmax],sol, ind =1;
int bs(int val)
{
int st = 0, dr = sol, m ;
for(; st<=dr ; )
{
m =(st+dr)/2;
if(m ==dr || (v[b[m + 1]] >= val && v[b[m]] < val))
return m;
if(v[b[m]] < val)
st= m + 1;
else
dr = m - 1;
}
return 0;
}
void print(int x)
{
if(t[x])
print(t[x]);
fout <<v[x] <<" ";
}
int secvmax()
{
b[1] = 1;
for(int i = 2; i <= N ;i++)
{
int poz = bs(v[i]);
t[i] = b[poz];
b[poz + 1] = i;
if(sol < poz + 1)
{
sol = poz + 1;
ind = i;
}
}
fout <<sol <<'\n';
print(ind);
}
void read()
{
fin >> N;
for(int i = 1; i <= N ;i++)
fin >> v[i];
sol = 1;
secvmax();
}
int main()
{
read();
fin.close();
return 0;
}