Pagini recente » Cod sursa (job #585384) | Cod sursa (job #1981078) | Cod sursa (job #469378) | Cod sursa (job #640983) | Cod sursa (job #2539217)
#include <bits/stdc++.h>
#define zeros(x) ((x ^ (x - 1)) & x)
#define NMax 100005
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n,v[NMax],d[NMax],t[NMax];
int len;
void Read()
{
f>>n;
for(int i = 1;i <= n;++i)
f>>v[i];
}
void reconstituie(int ind)
{
if(t[ind])
reconstituie(t[ind]);
g<<v[ind]<<" ";
}
void Solve()
{
len = d[1] = 1;
for(int i = 2;i <= n;++i)
{
int left = 1;
int right = len;
while(left <= right)
{
int mid = (left + right) / 2;
if(v[d[mid]] >= v[i])
right = mid - 1;
else
left = mid + 1;
}
int pos = left;
if(pos > len)
{
++len;
d[len] = i;
t[d[len]] = d[pos - 1];
}
else
{
d[pos] = i;
t[d[pos]] = d[pos - 1];
}
}
g<<len<<'\n';
reconstituie(d[len]);
g.close();
f.close();
}
int main()
{
Read();
Solve();
return 0;
}