Submission #1219514

#TimeUsernameProblemLanguageResultExecution timeMemory
1219514khomeRack (eJOI19_rack)C++20
40 / 100
179 ms167936 KiB
#include<bits/stdc++.h>
using namespace std;
#define int long long

const int INF = 1e18;
const int NEU = 0;

void solve(){
    int n, k; cin >> n >> k;
    vector<pair<int, int>> v;
    if (k == 1) {cout << 1 << endl; return; }
    if (k == 2) {cout << (1 + (1 << (n-1))); return;}

    int id = 2;
    int m = 1 << (n-1);

    v.push_back({1, m});
    v.push_back({m+1, 1 << n});

    while (v.size() < k){
        int sz = v.size();

        for (int i = sz - id; i < sz; i++){
            auto [l, r] = v[i];
            v.push_back({l, (l+r)/2});
        }

        for (int i = sz - id; i < sz; i++){
            auto [l, r] = v[i];
            v.push_back({(l+r)/2+1, r});
        }

        id <<=1;
    }
    // for (auto [l, r] : v){
    //     cout << l << ' ' << r << endl;
    // }
    cout << (v[k-3].first + v[k-3].second + 1) / 2 << endl;
}


signed main(){
    ios::sync_with_stdio(0); cin.tie(0);
    int t = 1;

    // cin >> t;
    while(t--)solve();
}





/*


int rec(int l, int r, vector<vector<int>> &v){
    int ans = 0;

    for (int j = 0; j < 32; j++){
        int cur = v[r][31-j] - v[l-1][31-j];
        cur %= 2;
        
        ans += cur * (1<<j);
    }

    return ans;

}

void add(vector<vector<int>> &v, int id, int x){
    for (int i = 0; i <= 31; i++){

        v[id][31-i] = min(1ll, x & (1<<i)) + v[id-1][31-i];
    }
    return;
}

void solve(){
    int n, q; cin >> n >> q;
    vector<vector<int>> toq((n+1)/2+1, vector<int>(32));
    vector<vector<int>> juft(n/2+1, vector<int>(32));

    for (int i = 0 ; i < n; i++) {
        int x; cin >> x;
        if (i%2==0) add(toq, i/2+1, x);
        if (i%2==1) add(juft, i/2+1, x);
    }

    for (int i = 0; i < q; i++) {
        int p, l, r; cin >> p >> l >> r;
        if (p == 1) {
            if (l%2 == 1) {
                add(toq, (l-1)/2+1, r);
                // for (int j : toq[(l-1)/2]) cout << j;cout << endl;
            }
            else add(juft, (l-1)/2+1, r);

        }

        else {
            if ((r-l+1) % 2 == 0) cout << 0 << endl;
            else{
                if (l%2 == 1) {
                    cout << rec((l-1)/2+1, (r-1)/2+1, toq);
                }
                if (l%2 == 0) {
                    cout << rec((l-1)/2+1, (r-1)/2+1, juft);
                }
            }
            cout << endl;
        }
    }
    // cout << (5^5) << endl;

    // for (auto i : toq){
    //     for (int j : i) cout << j;cout << endl;
    // }cout << endl;

    // for (auto i : juft){
    //     for (int j : i) cout << j; cout << endl;
    // }cout << endl;    
}




*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...