Pagini recente » Cod sursa (job #1088996) | Cod sursa (job #612810) | Cod sursa (job #580597) | Cod sursa (job #1970377) | Cod sursa (job #2998342)
#include<fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int i , n , st , dr , p , poz;
int x[100005] , v[100005] , ant[100005];
int cb (int left , int right , int c)
{
int poz = 0;
while (left <= right)
{
int mij = (left + right) / 2;
if (c > v[x[mij]])
{
poz = mij;
left = mij + 1;
}
else
right = mij - 1;
}
return poz;
}
int main()
{
f >> n;
for (i = 1 ; i <= n ; i++)
f >> v[i];
x[1] = 1;
st = 1;
dr = 1;
for (i = 2 ; i <= n ; i++)
{
int p = cb (st , dr , v[i]);
if(p == dr)
dr++;
x[p+1] = i;
ant[i] = x[p];
}
g << dr << '\n';
i = 1;
while (1)
{
if (x[i] == 0)
break;
else
g << v[x[i]] <<" ";
i++;
}
return 0;
}