Cod sursa(job #1994136)

Utilizator vic2002Melinceanu Victor vic2002 Data 24 iunie 2017 11:15:13
Problema Subsir crescator maximal Scor 35
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include<bits/stdc++.h>
#define rc(x) return cout<<x<<endl,0
#define pb push_back
#define in insert
#define er erase
#define fr first
#define sc second
const int inf=INT_MAX;
const int nmax=2e9+5;
const int mod=1e9+7;
typedef long long ll;
using namespace std;
ll n,i,x;
map<ll,ll>bit;
void upd(ll i,ll vl)
{
	for(;i<=nmax;i+=i&(-i))bit[i]=max(bit[i],vl);
}
ll query(ll i)
{
	ll ans=0;
	for(;i>=1;i-=i&(-i))ans=max(ans,bit[i]);
	return ans;
}
int main() 
{
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);
    ios_base::sync_with_stdio(false);cin.tie(0);cerr.tie(0);cout.tie(0);
    cin>>n;
    while(n--)
	{
		cin>>x;
		upd(x,query(x-1)+1);
	}
	cout<<query(nmax)<<endl;
    return 0;
}