Pagini recente » Cod sursa (job #2417180) | Cod sursa (job #3004216) | Cod sursa (job #2905439) | Cod sursa (job #3216167) | Cod sursa (job #2863256)
#include <bits/stdc++.h>
#define x(i) (i&(-i))
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int NMAX = 100005;
const int VALMAX = 2000000005;
pair<int,int> b[NMAX];
int a[NMAX],c[NMAX],pre[NMAX];
int aib[NMAX],dp[NMAX];
int n;
void citire(){
fin >> n;
for(int i=1;i<=n;i++)
fin >> a[i];
}
void normalizare(){
for(int i=1;i<=n;i++){
b[i].first=a[i];
b[i].second=i;
}
sort(b+1,b+n+1);
int k=0;
for(int i=1;i<=n;i++){
if(b[i].first!=b[i-1].first) c[i]=++k;
else c[i]=k;
}
for(int i=1;i<=n;i++){
a[b[i].second]=c[i];
} /// a este acum normalizat
}
void update_aib(int poz,int val){
for(int i=poz;i<=n;i+=x(i))
aib[i]=max(aib[i],val);
return;
}
int query_aib(int poz){
int maxim=0;
for(int i=poz;i>=1;i-=x(i)){
maxim=max(maxim,aib[i]);
}
return maxim;
}
void solve(){
dp[1]=1;
update_aib(a[1],dp[1]);
for(int i=2;i<=n;i++){
int maxim = query_aib(a[i]-1);
dp[i]=maxim+1;
update_aib(a[i],dp[i]);
}
}
void afis(){
int rasp=0,ind=0;
for(int i=1;i<=n;i++){
if(dp[i]>rasp){
rasp=dp[i];
ind=i;
}
}
fout << rasp << '\n';
/*
for(int i=1;i<=n;i++){
fout << a[i] << ' ';
}
fout << '\n';
for(int i=1;i<=n;i++){
fout << b[i].first << ' ' << b[i].second << '\n';
}
fout << '\n';
for(int i=1;i<=n;i++){
fout << c[i] << ' ';
}*/
}
int main()
{
citire();
normalizare();
solve();
afis();
return 0;
}