Pagini recente » Cod sursa (job #1523619) | Cod sursa (job #332473) | Cod sursa (job #2710150) | Cod sursa (job #1409568) | Cod sursa (job #2989676)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("scmax.in");
ofstream fout ("scmax.out");
int n, x, nr;
int a[200005];
int dp[200005];
int best[200005];
void CB(int i)
{
int st, dr, p, mij, x = a[i];
if (x <= dp[1])
{
dp[1] = x;
best[i] = 1;
return;
}
if (x > dp[nr])
{
nr++;
dp[nr] = x;
best[i] = nr;
return ;
}
/// caut cea mai din stanga poz. p cu a[i]<= dp[p]
st = 1; dr = nr; p = nr;
while (st <= dr)
{
mij = (st + dr) / 2;
if (x <= dp[mij])
{
p = mij;
dr = mij - 1;
}
else st = mij + 1;
}
dp[p] = x;
best[i] = p;
}
int main()
{
fin >> n;
for (int i = 1; i <= n; i++)
fin >> a[i];
best[1] = 1;
dp[1] = a[1];
dp[0] = 0;
nr = 1;
for (int i = 2; i <= n; i++) {
CB(i);
}
fout << nr << "\n";
return 0;
}