제출 #781185

#제출 시각아이디문제언어결과실행 시간메모리
781185raphaelpIntercastellar (JOI22_ho_t1)C++14
100 / 100
380 ms9164 KiB
#include <bits/stdc++.h>
using namespace std;
int dico(int l, int r, long long val)
{
    long long mil = (l + r) / 2;
    if (mil == l)
        return l;
    mil = (1 << mil);
    if (val % mil == 0)
    {
        return dico((l + r) / 2, r, val);
    }
    else
        return dico(l, (l + r) / 2, val);
}
int dico2(int l, int r, long long val, vector<long long> &len)
{
    long long mil = (l + r) / 2;
    if (mil == l)
        if (val > len[mil])
            return r;
        else
            return l;
    if (val > len[mil])
    {
        return dico2((l + r) / 2, r, val, len);
    }
    else
        return dico2(l, (l + r) / 2, val, len);
}
int main()
{
    int N;
    cin >> N;
    vector<long long> value(N);
    vector<long long> len(N, 1);
    for (int i = 0; i < N; i++)
    {
        cin >> value[i];
        long long dec = dico(0, 31, value[i]);
        dec = (1 << dec);
        value[i] /= dec;
        len[i] *= dec;
    }
    for (int i = 1; i < N; i++)
    {
        len[i] += len[i - 1];
    }
    int Q;
    cin >> Q;
    for (int i = 0; i < Q; i++)
    {
        long long x;
        cin >> x;
        cout << value[dico2(0, N, x, len)] << '\n';
    }
}

컴파일 시 표준 에러 (stderr) 메시지

Main.cpp: In function 'int dico2(int, int, long long int, std::vector<long long int>&)':
Main.cpp:19:8: warning: suggest explicit braces to avoid ambiguous 'else' [-Wdangling-else]
   19 |     if (mil == l)
      |        ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...