Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- #define fast ios_base::sync_with_stdio(0);cin.tie(NULL);cout.tie(NULL)
- #define ll long long
- #define ld long double
- #define pb push_back
- #define fe first
- #define se second
- #define nl "\n"
- #define pp pair < ll , ll >
- #define sz(x) (ll)x.size()
- #define st(x) sort(x.begin(),x.end())
- #define rst(x) sort(x.rbegin(), x.rend())
- #define all(x) x.begin(),x.end()
- long double pi = 3.14159265358979323;
- const double EPS = 1e-12;
- const int N = 1e6 + 5;
- const int mod = 1e9 + 7;
- //Day1
- //Printing Longest Increasing Subsequence in nlogn
- int main()
- {
- fast;
- ll t = 1;
- //cin >> t;
- while(t--){
- ll n;
- cin >> n ;
- ll a[n];
- for(int i = 0 ; i < n ;i++ ){
- cin >> a[i];
- }
- vector < pair < ll, ll > > v;
- v.pb({a[0],0});
- vector < ll > prevind(n , -1);
- ll h[n];
- for(int i = 0 ; i < n ;i++ ){
- h[i] = 1;
- }
- //memset(h , 0 , sizeof(h));
- for(int i = 1 ; i < n ;i++ ){
- // cout << a[i] << " ";
- pair < ll , ll > p = {a[i] , -1};
- ll j = lower_bound(v.begin() , v.end() ,p) - v.begin();
- //cout << j << "\n";
- if(j == 0){
- v[j] = {a[i] ,i};
- }
- else if(j == sz(v)){
- prevind[i] = v[j - 1].se;
- v.pb({a[i],i});
- h[i] += h[v[j-1].se];
- }
- else{
- prevind[i] = v[j - 1].se;
- v[j] = {a[i] , i};
- h[i] += h[v[j-1].se];
- }
- // cout << h[i] << "\n";
- }
- ll maxm = 0 ;
- ll ind = 0 ;
- for(int i = 0 ; i < n ;i++ ){
- if(maxm < h[i]){
- maxm = h[i];
- ind = i;
- }
- }
- cout << maxm << "\n";
- /* cout << a[ind] << " ";
- while(prevind[ind] != -1){
- ind = prevind[ind];
- cout << a[ind] << " ";
- }
- cout << "\n";*/
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment