Cod sursa(job #2834757)
| Utilizator | Data | 17 ianuarie 2022 17:02:32 | |
|---|---|---|---|
| Problema | Subsir crescator maximal | Scor | 0 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva educationala | Marime | 0.7 kb |
#include <bits/stdc++.h>
using namespace std;
int main(){
ifstream fin("scmax.in");
ofstream fout("scmax.in");
int n;
fin>>n;
vector<int> lis(1);
fin>>lis[0];
for(int i=2;i<=n;++i){
auto cb=[](int x, vector<int> &a){
int st=0, dr=a.size()-1;
int ans=dr;
while(st<=dr){
int mij=(st+dr)/2;
if(a[mij]==x) return mij;
if(a[mij]>x){
ans=mij;
dr=mij-1;
}else st=mij+1;
}
return ans;
};
int x; fin>>x;
if(x>lis.back()) lis.push_back(x);
else lis[cb(x,lis)]=x;
}
fout<<lis.size();
}
