Pagini recente » Cod sursa (job #2358711) | Cod sursa (job #976762) | Cod sursa (job #2566014) | Cod sursa (job #788309) | Cod sursa (job #2365434)
#include <bits/stdc++.h>
using namespace std;
const int mxn = 100 * 1000 + 10;
int sir[ mxn ];
int varf[ mxn ];
int n;
int cautare(int st, int sf, int val){
int mid;
while(sf - st > 1){
mid = (st + sf) / 2;
if(varf[ mid ] >= val)
sf = mid;
else
st = mid;
}
return st;
}
int solve(){
int lungime = 1;
varf[ 1 ] = sir[ 1 ];
for(int i = 2; i <= n; i++){
int nx = sir[ i ];
if(nx < varf[ 1 ])
varf[ 1 ] = nx;
else{
if(nx > varf[ lungime ]){
varf[ ++lungime ] = nx;
}
else{
varf[ cautare(0, lungime, nx) ] = nx;
}
}
}
return lungime;
}
int main()
{
ifstream cin("scmax.in");
ofstream cout("scmax.out");
cin>> n;
for(int i = 1; i <= n; i++)
cin>> sir[ i ];
cout<< solve();
return 0;
}