제출 #1022532

#제출 시각아이디문제언어결과실행 시간메모리
1022532vjudge1Global Warming (CEOI18_glo)C++17
100 / 100
144 ms21224 KiB
// 23 - 12 - 23 #include<bits/stdc++.h> using namespace std; #define read() ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0) #define day() time_t now = time(0);char* x = ctime(&now);cerr<<"Right Now Is : "<<x<<"\n" #define int long long #define ii pair<int,int> #define X first #define Y second const long long MAX = (int)4e5 + 5; const long long INF = (int)1e9; const long long MOD = (int)1e9 + 7; struct Fenwick{ int bit[MAX]; void update(int pos,int val){ for(;pos < MAX;pos += pos & -pos)bit[pos] = max(bit[pos],val); } int get(int pos){ int res = 0; for(;pos > 0;pos -= pos & -pos)res = max(res,bit[pos]); return res; } }; int n,val; Fenwick ori,sub,siu; int a[MAX]; int dp[MAX][3]; signed main(){ read(); cin >> n >> val; vector<int> rt; for(int i = 1;i <= n;i++){ cin >> a[i]; rt.push_back(a[i]); rt.push_back(a[i] - val); } sort(rt.begin(),rt.end()); rt.erase(unique(rt.begin(),rt.end()),rt.end()); int res = 0; for(int i = 1;i <= n;i++){ int x = lower_bound(rt.begin(),rt.end(),a[i]) - rt.begin() + 1; int y = lower_bound(rt.begin(),rt.end(),a[i] - val) - rt.begin() + 1; dp[i][0] = ori.get(x - 1) + 1; // do nothing dp[i][1] = sub.get(y - 1) + 1; // decrease i by x dp[i][2] = max(sub.get(x - 1),siu.get(x - 1)) + 1; siu.update(x,dp[i][2]); ori.update(x,dp[i][0]); sub.update(y,dp[i][1]); res = max({res,dp[i][0],dp[i][1],dp[i][2]}); //cout << dp[i][0] << " " << dp[i][1] << " " << dp[i][2] << "\n"; } cout << res; }
#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...