Pagini recente » Cod sursa (job #781017) | Cod sursa (job #2496887) | Cod sursa (job #1764036) | Cod sursa (job #1878072) | Cod sursa (job #2053698)
#include <bits/stdc++.h>
using namespace std;
int dp[100005];
int a[100005];
int k;
int n;
ofstream fout("scmax.out");
void Read()
{
int i;
ifstream fin("scmax.in");
fin >> n;
for(i = 1; i <= n; i++)
fin >> a[i];
fin.close();
}
/// caut binar in 1, 2, 3... k in dp cea mai din stanga pozitie p cu x <= dp[p]
void CautBin(int x)
{
if (x > dp[k])
{
k++;
dp[k] = x;
return;
}
if (x <= dp[1])
{
dp[1] = x;
return;
}
int dr, st, mid, p;
st = 1;
dr = k;
p = 1;
while(st <= dr)
{
mid = (st + dr) / 2;
if(x <= dp[mid])
{
p = mid;
dr = mid - 1;
}
else st = mid + 1; /// x >= dp[mid]
}
dp[p] = x;
}
void Dinamica()
{
int i;
k = 1;
dp[1] = a[1];
for(i = 2; i <= n; i++)
CautBin(a[i]);
fout << k << "\n";
for(i = 1; i <= k; i++)
fout << dp[i] << " ";
}
int main()
{
Read();
Dinamica();
return 0;
}