Submission #1221836

#TimeUsernameProblemLanguageResultExecution timeMemory
1221836anonymous321Floppy (RMI20_floppy)C++20
28 / 100
28 ms2912 KiB
#include <stdlib.h>
#include <string.h>

#include "floppy.h"
#include <bits/stdc++.h>
using namespace std;

void read_array(int subtask_id, const vector<int> &v) {
    int n = v.size();
    int l = floor(log2(n));
    vector<pair<int, int>> vq {};
    for (int i = 0; i < n; i++) {
        vq.push_back({v[i], i});
    }
    vector<int> ord (n, -1);
    sort(vq.begin(), vq.end());
    for (int i = 0; i < n; i++) {
        ord[vq[i].second] = i;
    }
    
    string bits = "";
    for (int i = 0; i < n; i++) {
        for (int j = 0; j <= l; j++) {
            if ((ord[i] >> j) & 1) bits += "1";
            else bits += "0";
        }
    }
    
    save_to_floppy(bits);
}

vector<int> solve_queries(int subtask_id, int N,
        const string &bits,
        const vector<int> &a, const vector<int> &b) {
    int l = floor(log2(N));
    vector<int> ord (N, 0);
    int cur = 0;
    for (int i = 0; i < N; i++) {
        for (int j = 0; j <= l; j++) {
            if (bits[cur] == '1') ord[i] += 1 << j;
            cur++;
        }
    }

    int k = sqrt(N);
    int nk = (N-1)/k + 1;
    vector<int> vb (nk, -1);
    vector<int> vind (nk, -1);
    for (int i = 0; i < N; i++) {
        if (vb[i/k] < ord[i]) {
            vb[i/k] = ord[i];
            vind[i/k] = i;
        }
    }

    vector<int> ans (a.size(), 0);
    for (int i = 0; i < a.size(); i++) {
        int sol = -1;
        int id = -1;
        int lo = a[i];
        int r = b[i];
        while (lo <= r) {
            if (lo%k == 0 && lo + k <= r) {
                if (sol < vb[lo/k]) {
                    sol = vb[lo/k];
                    id = vind[lo/k];
                }
                lo += k;
            } else {
                if (sol < ord[lo]) {
                    sol = ord[lo];
                    id = lo;
                }
                lo++;
            }
        }
        ans[i] = id;
    }
    return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...