Submission #1247823

#TimeUsernameProblemLanguageResultExecution timeMemory
1247823rythm_of_knightMinerals (JOI19_minerals)C++17
80 / 100
17 ms2628 KiB
#include "minerals.h"
#include <bits/stdc++.h>

using namespace std;
vector <int> a, b;
static int cnt = 0, n, m;

void rec(int l, int r, int k, vector <int> q) {
    if (l == r)
        return Answer(a[l], q[0]), void();
    int m = l + r >> 1, lk = k, rk = k;
    vector <int> lft, rgt;
    if (k & 1) {
        for (int i = m + 1; i <= r; i++)
            cnt = Query(a[i]);
        lk ^= 2, rk ^= 3;
    } else {
        for (int i = l; i <= m; i++)
            cnt = Query(a[i]);
        lk = k ^ 3, rk = k ^ 2;
    }
    for (int j : q) {
        int tmp = Query(j);
        if (tmp == cnt) {
            lft.push_back(j);
        } else {
            rgt.push_back(j);
        }
        cnt = tmp;
    }
    rec(l, m, lk, lft);
    rec(m + 1, r, rk, rgt);
}

void Solve(int N) {
    n = N, m = 2 * n;
    for (int i = 1; i <= m; i++) {
        int tmp = Query(i);
        if (tmp != cnt)
            a.push_back(i);
        else
            b.push_back(i);
        cnt = tmp;
    }
    rec(0, n - 1, 3, b);
}
#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...