제출 #990817

#제출 시각아이디문제언어결과실행 시간메모리
990817ChottuFHacker (BOI15_hac)C++17
100 / 100
91 ms13500 KiB
  #include <bits/stdc++.h>
  using namespace std;

  deque<int> q;

  void ins(int x){
      while (!q.empty() && q.back() > x){
          q.pop_back();
      }
      q.push_back(x);
  }

  void ers(int x){
      if (!q.empty() && q.front() == x){
          q.pop_front();
      }
  }

  int getmn(){
      return q.front();
  }

  int main() {
      int n;
      cin >> n;
      vector<int> a(2*n);
      for (int i = 0; i<n; i++){
          cin >> a[i];
          a[n+i] = a[i];
      }
      vector<int> res;
      int k = (n+1)/2;
      int sm = 0;
      for (int i = 0; i<k; i++){
          sm += a[i];
      }
      res.push_back(sm);
      for (int i = k; i<n+k-1; i++){
          sm -= a[i-k];
          sm += a[i];
          res.push_back(sm);
      }
      for (int i = 0; i<n; i++){
          res.push_back(res[i]);
      }
      vector<int> ans(n, 1e9);
      for (int i = 0; i<k; i++){
          ins(res[i]);
      }
      ans[k-1] = getmn();
      for (int i = k; i<2*n; i++){
          ers(res[i-k]);
          ins(res[i]);
          int ind = i; if (ind >= n) ind -= n;
          ans[ind] = getmn();
      }
      int mx = 0;
      for (auto u : ans){
          mx = max(mx,u);
      }
      cout << mx << '\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...