Submission #67352169


Source Code Expand

#include <iostream>
#include <vector>
#include <set>
#include <unordered_set>
#include <deque>
#include <algorithm>

using namespace std;
using loong = long long;


using pp = pair<int,int>;
int demx = 1'000'000'000;
struct segTreeMin{
public:
    void placeholder();
    int nxt, u, v, sm;

    int logup(int n){
        int res = 1;
        while (res < n){
            res *= 2;
        }
        return res;
    }

    segTreeMin(){

    }

    segTreeMin(int sze, vector<int> &base){
        rsz = sze;
        sz = logup(sze);
        dsz = 2*sz;

        data = vector<pp>(dsz, {demx, 0});
        lbound = vector<int>(dsz, 0);
        rbound = vector<int>(dsz, 0);

        for (int i = 0; i < sz; i++){
            lbound[sz+i] = i;
            rbound[sz+i] = i;
        }
        for (int i = 0; i < rsz; i++){
            data[i+sz] = {base[i], i};
        }

        for (int i = sz-1; i > 0; i--){
            lbound[i] = lbound[2*i];
            rbound[i] = rbound[2*i+1];
            data[i] = min(data[i*2],data[i*2+1]);
        }
    }



    pp getMin(int l, int r, int curr){
        if (l > rbound[curr] || lbound[curr] > r){
            return {demx, 0};
        }
        if (l <= lbound[curr] && rbound[curr] <= r){
            return data[curr];
        }
        pp lsm = {demx, 0};
        lsm = min(lsm, getMin(l, r, curr * 2));
        lsm = min(lsm, getMin(l, r, curr * 2 + 1));
        return lsm;
    }

    void updateMin(int l, int r, int val, int curr){
        if (l > rbound[curr] || lbound[curr] > r){
            return;
        }
        if (l <= lbound[curr] && rbound[curr] <= r){
            data[curr].first+=val;
            return;
        }
        updateMin(l, r, val, curr * 2);
        updateMin(l, r, val, curr * 2 + 1);
        data[curr] = min(data[curr*2],data[curr*2+1]);
        return;
    }
    void updateMin(int l, int r, int val){
        updateMin(l, r, val, 1);
    }

    pp getMin(int l, int r){
        return getMin(l, r, 1);
    }


    int rsz;
    int sz;
    int dsz;
    vector<pp> data;
    vector<int> lbound;
    vector<int> rbound;
};




void buildMin(vector<int> &data, vector<int> &res, int strt, int sze, segTreeMin &tree){
    //cout << sze << endl;
    if (sze == 1){
        res.push_back(data[strt]);
        return;
    }
    pp ixMin = tree.getMin(strt, strt+sze-1);
    if (ixMin.second >= strt+sze/2){
        buildMin(data, res, strt+sze/2, sze/2, tree);
        buildMin(data, res, strt, sze/2, tree);
    } else {
        buildMin(data, res, strt, sze/2, tree);
        buildMin(data, res, strt+sze/2, sze/2, tree);
    }
}


int main() {

    int n, m, a, b, t, p, q;

    cin >> n;

    for (int i = 0; i < n; i++){
        cin >> t;
        t = (1<<(t));
        vector<int> dd(t);
        for (int j = 0; j < t; j++){
            cin >> dd[j];
        }
        vector<int> res;
        segTreeMin tree(dd.size(), dd);

        buildMin(dd, res, 0, dd.size(), tree);
        for (int j = 0; j < res.size(); j++){
            cout << res[j] << " ";
        }
        cout << endl;
    }


}

Submission Info

Submission Time
Task E - Reverse 2^i
User HronoS
Language C++ 20 (gcc 12.2)
Score 450
Code Size 3226 Byte
Status AC
Exec Time 183 ms
Memory 13800 KiB

Compile Error

Main.cpp: In function ‘int main()’:
Main.cpp:137:27: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<int>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
  137 |         for (int j = 0; j < res.size(); j++){
      |                         ~~^~~~~~~~~~~~
Main.cpp:122:12: warning: unused variable ‘m’ [-Wunused-variable]
  122 |     int n, m, a, b, t, p, q;
      |            ^
Main.cpp:122:15: warning: unused variable ‘a’ [-Wunused-variable]
  122 |     int n, m, a, b, t, p, q;
      |               ^
Main.cpp:122:18: warning: unused variable ‘b’ [-Wunused-variable]
  122 |     int n, m, a, b, t, p, q;
      |                  ^
Main.cpp:122:24: warning: unused variable ‘p’ [-Wunused-variable]
  122 |     int n, m, a, b, t, p, q;
      |                        ^
Main.cpp:122:27: warning: unused variable ‘q’ [-Wunused-variable]
  122 |     int n, m, a, b, t, p, q;
      |                           ^

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 450 / 450
Status
AC × 1
AC × 26
Set Name Test Cases
Sample 00_sample_00.txt
All 00_sample_00.txt, 01_test_00.txt, 01_test_01.txt, 01_test_02.txt, 01_test_03.txt, 01_test_04.txt, 01_test_05.txt, 01_test_06.txt, 01_test_07.txt, 01_test_08.txt, 01_test_09.txt, 01_test_10.txt, 01_test_11.txt, 01_test_12.txt, 01_test_13.txt, 01_test_14.txt, 01_test_15.txt, 01_test_16.txt, 01_test_17.txt, 01_test_18.txt, 01_test_19.txt, 01_test_20.txt, 01_test_21.txt, 01_test_22.txt, 01_test_23.txt, 01_test_24.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 1 ms 3460 KiB
01_test_00.txt AC 1 ms 3452 KiB
01_test_01.txt AC 1 ms 3448 KiB
01_test_02.txt AC 96 ms 3476 KiB
01_test_03.txt AC 8 ms 3472 KiB
01_test_04.txt AC 71 ms 3464 KiB
01_test_05.txt AC 72 ms 3464 KiB
01_test_06.txt AC 80 ms 3492 KiB
01_test_07.txt AC 76 ms 3524 KiB
01_test_08.txt AC 96 ms 4664 KiB
01_test_09.txt AC 101 ms 4528 KiB
01_test_10.txt AC 95 ms 4628 KiB
01_test_11.txt AC 115 ms 13800 KiB
01_test_12.txt AC 109 ms 8932 KiB
01_test_13.txt AC 102 ms 6044 KiB
01_test_14.txt AC 183 ms 4652 KiB
01_test_15.txt AC 100 ms 13256 KiB
01_test_16.txt AC 99 ms 13324 KiB
01_test_17.txt AC 100 ms 13400 KiB
01_test_18.txt AC 102 ms 13336 KiB
01_test_19.txt AC 103 ms 13368 KiB
01_test_20.txt AC 103 ms 13360 KiB
01_test_21.txt AC 102 ms 13424 KiB
01_test_22.txt AC 102 ms 13384 KiB
01_test_23.txt AC 102 ms 13536 KiB
01_test_24.txt AC 102 ms 13396 KiB