제출 #1183183

#제출 시각아이디문제언어결과실행 시간메모리
1183183loomGlobal Warming (CEOI18_glo)C++20
17 / 100
31 ms6080 KiB
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define nl '\n'

int lis(vector<int>& a){
   int n = a.size();

   vector<int> v;
   for(int i=0; i<n; i++){
      if(v.empty() or v.back() < a[i]){
         v.push_back(a[i]);
         continue;
      }

      *lower_bound(v.begin(), v.end(), a[i]) = a[i];
   }

   return v.size();
}

inline void solve(){
   int n, x;
   cin>>n>>x;
   vector<int> a(n);
   for(int i=0; i<n; i++) cin>>a[i];

   int pre1[n], pre2[n];
   vector<int> v;

   for(int i=0; i<n; i++){
      if(v.empty() or v.back() < a[i]){
         v.push_back(a[i]);
         pre1[i] = v.size();
         continue;
      }

      *lower_bound(v.begin(), v.end(), a[i]) = a[i];
      pre1[i] = v.size();
   }

   v.clear();
   for(int i=n-1; i>=0; i--){
      if(v.empty() or v.back() > a[i]){
         v.push_back(a[i]);
         pre2[i] = v.size();
         continue;
      }

      *--upper_bound(v.rbegin(), v.rend(), a[i]) = a[i];
      pre2[i] = v.size();
   }

   int ans = pre1[n-1];
   for(int i=0; i<n-1; i++){
      ans = max(ans, pre1[i] + pre2[i+1]);
   }

   cout<<ans;
}

signed main(){
   ios_base::sync_with_stdio(0);
   cin.tie(NULL);cout.tie(NULL);

   int t = 1;
   //cin>>t;
   while(t--) solve();

   return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...