Pagini recente » Cod sursa (job #1158201) | Cod sursa (job #3217533) | Cod sursa (job #2075010) | Cod sursa (job #1754996) | Cod sursa (job #2365408)
#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 - 1;
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(1, 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;
}