Pagini recente » Cod sursa (job #2318452) | Cod sursa (job #1765923) | Cod sursa (job #2414270) | Cod sursa (job #2727005) | Cod sursa (job #2172578)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int nmax = 100005;
int N,K;
int v[nmax], lst[nmax], dp[nmax];
inline void Read()
{
fin >> N;
for(int i = 1; i <= N; i++)
fin >> v[i];
}
inline int BS(int x)
{
int st,dr,mid,ans;
st = 1; dr = K;
while(st <= dr)
{
mid = (st + dr) / 2;
if(v[dp[mid]] >= x)
{
ans = mid;
dr = mid-1;
}
else st = mid+1;
}
return ans;
}
inline void Rec(int poz)
{
if(poz == 0) return;
int x = v[poz];
poz = lst[poz];
Rec(poz);
fout << x << " ";
}
inline void Solve()
{
int i,p;
for(i = 1; i <= N; i++)
{
if(v[i] > v[dp[K]])
{
dp[++K] = i;
lst[i] = dp[K-1];
}
else if(v[i] < v[dp[1]]) dp[1] = i;
else
{
p = BS(v[i]);
dp[p] = i;
lst[i] = dp[p-1];
}
}
fout << K << "\n";
Rec(dp[K]);
}
int main()
{
Read();
Solve();
return 0;
}