Pagini recente » Cod sursa (job #1662175) | Cod sursa (job #2574547) | Cod sursa (job #2548261) | Cod sursa (job #2617647) | Cod sursa (job #2682563)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int N;
int v[10100];
int dp[10100], dp2[10100], p[10100];
/// dp[i] lungimea maxima a unui subsir crescator care are ca ultim element v[i]
/// p[i] ultimul element al unui subsir crescator de lungime i
int main()
{
fin >> N;
for(int i = 1; i <= N; i ++)
{
fin >> v[i];
}
int k = 1, ans = 1;
dp[1] = 1;
p[1] = v[1];
for(int i = 2; i <= N; i ++)
{
if(v[i] > p[k])
{
k++;
dp[i] = k;
p[k] = v[i];
}
else
{
dp[i] = dp[i-1];
int st = 1, dr = k, poz = 0, mijloc = 0;
while(st <= dr)
{
mijloc = (st + dr) / 2;
if(v[i] >= p[mijloc])
{
st = mijloc + 1;
}
else
{
poz = mijloc;
dr = mijloc - 1;
}
}
p[poz] = v[i];
}
}
for(int i = 1; i <= N; i ++)
ans = max(ans,dp[i]);
fout << ans << '\n';
}