Pagini recente » Cod sursa (job #676343) | Cod sursa (job #2953157) | Cod sursa (job #1825958) | Cod sursa (job #1186311) | Cod sursa (job #3000444)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("scmax.in");
ofstream fout ("scmax.out");
const int dim = 1e5 + 5;
int v[dim] , dp[dim] , p[dim] , k , n;
void Reconstruire (int Lg , int poz)
{
if(Lg >= 1)
{
int i = poz;
for(; p[i] < Lg ; --i);
Reconstruire(Lg - 1 , i - 1);
fout << dp[p[i]] << " ";
}
}
int main()
{
fin >> n;
for(int i = 1 ; i <= n ; ++i)
fin >> v[i];
dp[++k] = v[1];
for(int i = 2 ; i <= n ; ++i)
if(v[i] > dp[k])
{
dp[++k] = v[i];
p[i] = k;
}
else if(v[i] < dp[k])
{
int l = 1 , r = k , poz;
while(l <= r)
{
int mid = (l + r) / 2;
if(dp[mid] > v[i])
{
poz = mid;
r = mid - 1;
}
else
l = mid + 1;
}
dp[poz] = v[i];
p[i] = poz;
}
fout << k << '\n';
Reconstruire(k , n);
}