제출 #1039108

#제출 시각아이디문제언어결과실행 시간메모리
1039108IrateLightning Conductor (POI11_pio)C++17
72 / 100
1034 ms48624 KiB
#include<bits/stdc++.h> using namespace std; struct SparseTable{ vector<int>LOG; vector<vector<int>>sTable; SparseTable(vector<int>&v){ int n = (int)v.size(); LOG.resize(n + 1); LOG[1] = 0; for(int i = 2;i <= n;++i){ LOG[i] = LOG[i / 2] + 1; } sTable.resize(LOG[n] + 1); for(int i = 0;i <= LOG[n];++i){ sTable[i].resize(n); } for(int i = 0;i < n;++i){ sTable[0][i] = v[i]; } for(int i = 1;i <= LOG[n];++i){ for(int j = 0;j + (1 << (i - 1)) < n;++j){ sTable[i][j] = max(sTable[i - 1][j], sTable[i - 1][j + (1 << (i - 1))]); } } } int Max(int l, int r){ int lg = LOG[r - l + 1]; return max(sTable[lg][l], sTable[lg][r - (1 << lg) + 1]); } }; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int n; cin >> n; vector<int>v(n); for(int i = 0;i < n;++i){ cin >> v[i]; } SparseTable table(v); for(int i = 0;i < n;++i){ int l = i + 1, p = 0; for(int j = 1;;++j){ int r = min(n - 1, i + j * j); if(l >= n)break; p = max(p, table.Max(l, r) + j - v[i]); l = r + 1; } l = i - 1; for(int j = 1;;++j){ int r = max(0, i - j * j); if(l < 0)break; p = max(p, table.Max(r, l) + j - v[i]); l = r - 1; } cout << p << '\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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...