Pagini recente » Cod sursa (job #2120034) | Cod sursa (job #177110) | Cod sursa (job #1053667) | Cod sursa (job #2482388) | Cod sursa (job #2554461)
#include <fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n, lg;
int v[100001];
int poz[100001];
int ant[100001];
int cb(int x, int p)
{
int st = 1, dr = p, mij, poz1 = 0;
while (st <= dr)
{
mij = (st + dr) / 2;
if (v[poz[mij]] < x)
{
poz1 = mij;
st = mij + 1;
}
else
dr = mij - 1;
}
return poz1;
}
void afisare(int k)
{
if (ant[k])
afisare(ant[k]);
g << v[k] << " ";
}
int main()
{
f >> n;
lg = 1;
f >> v[1];
poz[1] = 1;
for (int i=2; i<=n; i++)
{
f >> v[i];
int p = cb(v[i], lg);
if (p == lg)
lg++;
poz[p+1] = i;
ant[i] = poz[p];
}
g << lg << "\n";
afisare(poz[lg]);
return 0;
}