Pagini recente » Cod sursa (job #913576) | Cod sursa (job #1712633) | Cod sursa (job #1155440) | Cod sursa (job #1613466) | Cod sursa (job #3332339)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int nmax = 1e5+5;
int cauta(int val);
void afisare(int i);
int best[nmax], v[nmax], n, lmax, pre[nmax];
int main()
{
fin>>n;
v[0] = INT_MAX;
for(int i = 1; i <= n; ++i)
{
fin>>v[i];
int l = cauta(v[i]);
best[l] = i;
pre[i] = best[l-1];
lmax = max(lmax, l);
}
fout<<lmax<<"\n";
afisare(best[lmax]);
return 0;
}
void afisare(int i)
{
if(i != 0)
{
afisare(pre[i]);
fout<<v[i]<<" ";
}
}
int cauta(int val)
{
int st = 1, dr = n, l;
while(st <= dr)
{
int mijl = (st+dr)/2;
if(v[best[mijl]] >= val)
{
l = mijl;
dr = mijl-1;
}
else
st = mijl+1;
}
return l;
}