제출 #1125780

#제출 시각아이디문제언어결과실행 시간메모리
1125780vladiliusGlobal Warming (CEOI18_glo)C++20
0 / 100
2094 ms6404 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; using pii = pair<int, int>; #define pb push_back #define ff first #define ss second struct FT{ vector<int> bit; int n; FT(int ns){ n = ns; bit.resize(n + 1); } void upd(int v, int x){ while (v <= n){ bit[v] = max(bit[v], x); v |= (v + 1); } } int get(int v){ int out = 0; while (v > 0){ out = max(out, bit[v]); v = (v & (v + 1)) - 1; } return out; } }; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, x; cin>>n>>x; vector<int> a(n + 1); for (int i = 1; i <= n; i++){ cin>>a[i]; } auto lis = [&](vector<int> x){ vector<pii> all; for (int i = 1; i <= n; i++){ all.pb({x[i], i}); } sort(all.begin(), all.end()); vector<int> vv; int i = 0, cc = 1; while (i < n){ int j = i; while (j < n && all[i] == all[j]){ x[all[j].ss] = cc; j++; } vv.pb(all[i].ff); i = j; cc++; } vector<int> :: iterator it; FT T(n); vector<int> dp(n + 1); int ret = 0; for (int i = 1; i <= n; i++){ it = lower_bound(vv.begin(), vv.end(), x[i]); int j = (int) (it - vv.begin()); dp[i] = 1 + T.get(j); ret = max(ret, dp[i]); T.upd(j + 1, dp[i]); } return ret; }; int out = lis(a); for (int i = 1; i <= n; i++){ a[i] -= x; out = max(out, lis(a)); } for (int i = 1; i <= n; i++) a[i] += x; for (int i = n; i > 0; i--){ a[i] += x; out = max(out, lis(a)); } cout<<out<<"\n"; }
#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...