Submission #1357853

#TimeUsernameProblemLanguageResultExecution timeMemory
1357853altern23커다란 상품 (IOI17_prize)C++20
90 / 100
22 ms11372 KiB
#include "prize.h"
#include <bits/stdc++.h>
using namespace std;

#define ll long long

ll N;

vector <vector<int>> dp(200005, {-1, -1});

ll sum(ll idx) {
      if (dp[idx][0] == -1) dp[idx] = ask(idx);
      return dp[idx][0]+dp[idx][1]; 
}

ll dnc(ll l, ll r) {
      if (l > r) return -1;
      while (l <= r && sum(l) != sum(r)) {
            if (sum(r) < sum(l)) {
                  if (!sum(r)) return r;
                  r--;
            }
            else {
                  if (!sum(l)) return l;
                  l++;
            }
      }
      if (l == r) {
            if (!sum(l)) return l;
            return -1;
      }
      // cek ada yang berharga ga di segment ini
      if (dp[r][0] == -1) dp[r] = ask(r);
      if (dp[l][0] == -1) dp[l] = ask(l);
      if (!(dp[r][0]-dp[l][0])) return -1;

      ll mid = (l+r)/2;
      return max(dnc(l, mid-1), dnc(mid, r));
}

int find_best(int n) {
      N = n;
      return dnc(0, N-1);      
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...