Submission #944274

#TimeUsernameProblemLanguageResultExecution timeMemory
944274nguyentunglamMinerals (JOI19_minerals)C++17
40 / 100
16 ms6928 KiB
#include "minerals.h"
#include <bits/stdc++.h>
using namespace std;

const int NN = 1e5 + 10;

bool in[NN];

int g[NN], one[NN], ans[NN], l[NN], r[NN];

vector<int> ask[NN];

void Solve(int n) {
  int cur = 0;
  for(int i = 1, j = 0; i <= 2 * n; i++) {
    if (Query(i) > cur) {
      g[i] = 1;
      in[i] ^= 1;
      cur++;
      one[++j] = i;
    }
    else g[i] = 2;
  }

  for(int i = 1; i <= 2 * n; i++) Query(i);

  for(int i = 1; i <= 2 * n; i++) if (g[i] == 2) {
    l[i] = 1;
    r[i] = n;
  }

  for(int loop = 1; loop <= 20; loop++) {
    bool stop = 1;
    for(int i = 1; i <= 2 * n; i++) if (g[i] == 2) {
      if (l[i] > r[i]) continue;
      stop = 0;
      int mid = l[i] + r[i] >> 1;
      ask[mid].push_back(i);
    }
    if (stop) break;
    for(int i = 1; i <= n; i++) {
      int cur = Query(one[i]);
      for(int &j : ask[i]) {
        int nxt = Query(j);
        if (nxt == cur) {
          ans[j] = i;
          r[j] = i - 1;
        } else l[j] = i + 1;
        Query(j);
      } ask[i].clear();
    }
    for(int i = 1; i <= n; i++) Query(one[i]);
  }

  for(int i = 1; i <= 2 * n; i++) if (g[i] == 2) {
    Answer(i, one[ans[i]]);
  }
}

Compilation message (stderr)

minerals.cpp: In function 'void Solve(int)':
minerals.cpp:37:22: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   37 |       int mid = l[i] + r[i] >> 1;
      |                 ~~~~~^~~~~~
#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...