Pagini recente » Cod sursa (job #2332808) | Cod sursa (job #1266422) | Cod sursa (job #3161441) | Cod sursa (job #2620581) | Cod sursa (job #2471923)
#include <bits/stdc++.h>
#define f(x) x&(-x)
typedef long long ll;
ll n, i, j, k, sol, var;
ll list[100001], ind[100001], aib[100001], back[100001];
void read();
void solve();
void write();
bool comp(ll x, ll y){return list[x]<list[y];}
int main()
{
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
read();
solve();
write();
fclose(stdin);
fclose(stdout);
return 0;
}
void read(){
scanf("%lld", &n);
for(i=1; i<=n; ++i) {
scanf("%lld", &list[i]);
ind[i]=i;
}
}
void solve(){
std::sort(ind+1, ind+n+1, comp);
for(i=1; i<=n; ++i){
if(list[ind[i]]!=list[ind[i-1]]) var=i;
back[ind[i]]=var;
}
for(i=1; i<=n; ++i) list[ind[i]]=i;
for(i=1; i<=n; ++i){
ll l=0;
for(j=back[i]; j>0; j-=f(j)) l=std::max(l, aib[j]);
sol=std::max(sol, ++l);
for(j=back[i]+1; j<=n; j+=f(j)) aib[j]=std::max(l, aib[j]);
}
}
void write(){
printf("%lld", sol);
}