Submission #783225

#TimeUsernameProblemLanguageResultExecution timeMemory
783225thimote75Intercastellar (JOI22_ho_t1)C++14
100 / 100
368 ms9208 KiB

#include <bits/stdc++.h>
#define int long long

using namespace std;

using idata = vector<int>;

void cumul (idata &a) {
    for (int i = 1; i < a.size(); i ++)
        a[i] += a[i - 1];
}
int bs (idata &arr, int t) {
    int a = -1;
    int b = arr.size();

    while (b - a > 1) {
        int c = (a + b) >> 1;

        if (arr[c] >= t) b = c;
        else a = c;
    }

    return b;
}

signed main () {
    int N;
    cin >> N;

    idata sizes (N);
    idata values(N);

    for (int i = 0; i < N; i ++) {
        int x; cin >> x;

        int count = 1;
        while ((x & 1) == 0) {
            count *= 2;
            x >>= 1;
        }

        sizes [i] = count;
        values[i] = x;
    }

    cumul(sizes);

    int Q;
    cin >> Q;

    for (int i = 0; i < Q; i ++) {
        int x;
        cin >> x;

        int r = bs(sizes, x);
        cout << values[r] << "\n";
    }
}

Compilation message (stderr)

Main.cpp: In function 'void cumul(idata&)':
Main.cpp:10:23: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   10 |     for (int i = 1; i < a.size(); i ++)
      |                     ~~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...