Pagini recente » Cod sursa (job #2585461) | Cod sursa (job #2674413) | Cod sursa (job #917306) | Cod sursa (job #233293) | Cod sursa (job #1210928)
// S[i] - cea mai mica valoare care poate sa fie finalul unui
// subsir crescator de i elemente
// 24 12 15 15 19
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
#define INF 1<<30
#define nmax 100001
int n,i,dr,poz;
int a[nmax],s[nmax];
int caut_bin(int st, int dr, int val)
{
while(st<=dr)
{
int mid=(st+dr)/2;
if(s[mid]<val && s[mid+1]>=val)
return mid;
if(s[mid]<val)
st=mid+1;
else
dr=mid-1;
}
return -1;
}
int main() {
fin>>n;
for(i=1;i<=n;i++)
{
fin>>a[i];
}
for(i=1;i<=n;i++)
{
s[i]=INF;
}
s[0]=-INF;
dr=0;
for(i=1;i<=n;i++)
{
poz=caut_bin(0, dr, a[i]);
s[poz+1]=a[i];
dr=max(dr, poz+1);
//cout<<poz<<" ";
}
fout<<dr<<"\n";
return 0;
}