Submission #490433

#TimeUsernameProblemLanguageResultExecution timeMemory
490433fun_dayGlobal Warming (CEOI18_glo)C++14
15 / 100
2082 ms3292 KiB
#include <bits/stdc++.h> using namespace std; vector<int> get_lis(vector<int> v){ int n = (int)v.size(); if(n == 0) return {}; vector<int> lis; vector<int> Last(n + 1 , -1) , p (n + 1 , -1); for(int i = 0 ; i < n ; i++){ int val = v[i]; auto q = lower_bound(lis.begin(),lis.end() , val); int idx = q - lis.begin(); if(q == lis.end()){ lis.emplace_back(val); } else{ *q = val; } Last[i] = (idx > 0 ? p[idx - 1] : -1); p[idx] = i; } vector<int> ans; int sz = (int)lis.size(); for(int i = p[sz - 1] ; i != -1 ; i = Last[i]){ ans.emplace_back(i); } reverse(ans.begin() , ans.end()); return ans; } int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int n , x; cin >> n >> x; vector<int> v(n); for(int i = 0 ; i < n ; i++){ cin >> v[i]; } vector<int> f; int best = 0; for(int i = 0 ; i < n ; i++){ f.emplace_back(v[i]); vector<int> s; vector<int> ans = get_lis(f); int Max = f[ans[(int)ans.size()-1]]; for(int j = i + 1 ; j < n ; j++){ if(v[j] + x > Max) s.emplace_back(v[j] + x); } vector<int> new_ans = get_lis(s); int a = (int)ans.size() , b = (int)new_ans.size(); best = max(best , a + b); } cout << best << '\n'; 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...