Submission #926063

# Submission time Handle Problem Language Result Execution time Memory
926063 2024-02-12T14:08:52 Z vjudge1 Floppy (RMI20_floppy) C++17
100 / 100
76 ms 27976 KB
#include <bits/stdc++.h>
#include "floppy.h"

using namespace std;

struct sparse{
    vector<vector<pair<int, int>>> s;
    void init(const vector<int> &a){
        s.resize(24, vector<pair<int, int>> (a.size()));
        for (int i=0; i<a.size(); i++){
            s[0][i] = {a[i], i};
        }

        for (int i=1; i<s.size(); i++){
            for (int j=0; j + (1 << (i-1)) < s[0].size(); j++){
                s[i][j] = max(s[i-1][j], s[i-1][j + (1 << (i-1))]);
            }
        }
    }
    pair<int, int> query(int l, int r) const{
        int lg = 31 - __builtin_clz(r - l + 1);
        return max(s[lg][l], s[lg][r - (1 << lg) + 1]);
    }
};

void get_bits(string &result, int l, int r, const sparse &v){
    int pos = v.query(l, r).second;
    if (l == pos) result += '0';
    else{
        result += '1';
        get_bits(result, l, pos-1, v);
    }

    if (pos == r) result += '0';
    else{
        result += '1';
        get_bits(result, pos+1, r, v);
    }
}
void read_array(int subtask_id, const vector<int> &v){
    string result;
    sparse x; x.init(v);
    get_bits(result, 0, v.size()-1, x);
    save_to_floppy(result);
}

void read_bits(vector<int> &v, const string &result, int &ptr, int depth){
    char posl = result[ptr++];
    if (posl == '1'){
        read_bits(v, result, ptr, depth-1);
    }

    v.push_back(depth);

    char posr = result[ptr++];
    if (posr == '1'){
        read_bits(v, result, ptr, depth-1);
    }
}
vector<int> solve_queries(int subtask_id, int N, const string &bits, const vector<int> &a, const vector<int> &b){
    vector<int> ss; int ptr = 0;
    read_bits(ss, bits, ptr, 0);
    sparse s; s.init(ss);
    vector<int> result(a.size());
    for (int i=0; i<result.size(); i++){
        result[i] = s.query(a[i], b[i]).second;
    }
    return result;
}

Compilation message

floppy.cpp: In member function 'void sparse::init(const std::vector<int>&)':
floppy.cpp:10:24: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   10 |         for (int i=0; i<a.size(); i++){
      |                       ~^~~~~~~~~
floppy.cpp:14:24: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<std::pair<int, int> > >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   14 |         for (int i=1; i<s.size(); i++){
      |                       ~^~~~~~~~~
floppy.cpp:15:44: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   15 |             for (int j=0; j + (1 << (i-1)) < s[0].size(); j++){
      |                           ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~
floppy.cpp: In function 'std::vector<int> solve_queries(int, int, const string&, const std::vector<int>&, const std::vector<int>&)':
floppy.cpp:65:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   65 |     for (int i=0; i<result.size(); i++){
      |                   ~^~~~~~~~~~~~~~
stub.cpp: In function 'void run2()':
stub.cpp:101:30: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
  101 |     if (query_answers.size() != M) {
      |         ~~~~~~~~~~~~~~~~~~~~~^~~~
# Verdict Execution time Memory Grader output
1 Correct 2 ms 804 KB Output is correct
2 Correct 1 ms 808 KB Output is correct
3 Correct 1 ms 808 KB Output is correct
4 Correct 1 ms 808 KB Output is correct
5 Correct 1 ms 804 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 19 ms 6436 KB Output is correct
2 Correct 20 ms 6460 KB Output is correct
3 Correct 18 ms 6720 KB Output is correct
4 Correct 18 ms 6700 KB Output is correct
5 Correct 18 ms 6468 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 72 ms 23476 KB Output is correct
2 Correct 74 ms 26732 KB Output is correct
3 Correct 74 ms 27976 KB Output is correct
4 Correct 76 ms 27772 KB Output is correct
5 Correct 74 ms 26780 KB Output is correct