Pagini recente » Cod sursa (job #1428730) | Cod sursa (job #2452976) | Cod sursa (job #3178088) | Cod sursa (job #2532694) | Cod sursa (job #3222604)
// Author: Tanasescu Andrei-Rares
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <map>
#include <unordered_map>
#include <set>
#include <unordered_set>
#include <queue>
#include <stack>
#include <deque>
#include <iomanip>
#include <vector>
#include <cassert>
#pragma GCC optimize("O3")
#define fi first
#define se second
#define pb push_back
#define pf push_front
using namespace std;
ifstream fin ("scmax.in");
ofstream fout ("scmax.out");
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
const ll Nmax=1e5+5, inf=1e9+5;
int n, len[Nmax], dr, nr;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
fin>>n;
while (n--){
fin>>nr;
// cautam binar prima lungime a unui subsir pentru care val este mai mica decat ultimul element al sau actual
int l=1, r=dr, mij, sol=dr+1;
while (l<=r){
mij=(l+r)/2;
if (nr<len[mij]){
sol=mij;
r=mij-1;
}
else l=mij+1;
}
if (len[sol-1]<nr){
if (sol==dr+1)
dr++;
len[sol]=nr;
}
}
fout<<dr;
return 0;
}