제출 #1245112

#제출 시각아이디문제언어결과실행 시간메모리
1245112guanex송신탑 (IOI22_towers)C++20
17 / 100
346 ms37908 KiB
#include "towers.h" #include <vector> #include<bits/stdc++.h> using namespace std; vector<int> h; pair<int, int> st[500005][20]; int stt[500005][20]; vector<pair<int, int>> x; vector<int> suff; int solve(int l, int r, int d, int lim){ if(r < l){ return -1; } if(l == r){ x.push_back({lim - h[l], 1}); return lim - h[l]; } int dist = log2(r - l + 1); int mid = st[l][dist].second; int mn = min(stt[l][dist], stt[r - (1 << dist) + 1][dist]); if(st[r - (1 << dist) + 1][dist].first > st[l][dist].first){ mid = st[r - (1 << dist) + 1][dist].second; } //cout << l << " " << r << " " << mid << endl; if(lim == 1000000001){ x.push_back({1000000001, 1}); }else x.push_back({lim - mn, 1}); int ans = max(solve(l, mid-1, d, h[mid]), solve(mid+1, r, d, h[mid])); x.push_back({ans, -1}); return max(lim - mn, ans); } void init(int N, std::vector<int> H) { int mx = 0; for(int i = 0; i < N; ++i){ st[i][0] = {H[i], i}; stt[i][0] = H[i]; h.push_back(H[i]); } for(int bit = 1; bit <= 18; ++bit){ //cout << bit << endl;s for(int i = 0; i < N; ++i){ st[i][bit] = max(st[i][bit-1], st[i + (1 << (bit-1))][bit-1]); stt[i][bit] = min(stt[i][bit-1], stt[i + (1 << (bit-1))][bit-1]); } } solve(0, N-1, N, 1000000001); sort(x.begin(), x.end()); for(int i = (int)x.size()-1; i >= 0; --i){ suff.push_back(x[i].second); if((int)suff.size() > 1){ suff[(int)suff.size()-1] += suff[(int)suff.size()-2]; } } reverse(suff.begin(), suff.end()); } int max_towers(int L, int R, int D) { if(D <= x[0].first){ return suff[0]; } int lo = 0; int hi = (int)x.size(); while(hi - lo > 1){ int mid = lo + (hi - lo) / 2; if(x[mid].first < D){ lo = mid; }else{ hi = mid; } } return suff[hi]; }
#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...