Submission #503301

#TimeUsernameProblemLanguageResultExecution timeMemory
503301LoboBrunhilda’s Birthday (BOI13_brunhilda)C++17
100 / 100
483 ms4504 KiB
#include<bits/stdc++.h>
using namespace std;

const long long inf = (long long) 1e18 + 10;
const int inf1 = (int) 1e9 + 10;
#define int long long
#define dbl long double
#define endl '\n'
#define sc second
#define fr first
#define mp make_pair
#define pb push_back
#define all(x) x.begin(), x.end()

#define maxn 110000
#define mxv 10000000

int m, q, p[maxn];

void solve() {
    cin >> m >> q;

    int lc = 1;
    for(int i = 1; i <= m; i++) {
        cin >> p[i];
        lc = lc*p[i];
        lc = min(lc, (int) mxv+1);
    }

    vector<int> d;
    //d[0] = 0;
    d.pb(0);
    int act = 1;
    while(act < lc) {
        int l = act;
        int r = mxv;
        int ans = act;
        while(l <= r) {
            int mid = (l+r)/2;

            bool ok = false;
            for(int i = 1; i <= m; i++) {
                if(mid - mid%p[i] < act) ok = true;
            }

            if(ok) {
                l = mid+1;
                ans = mid;
            }
            else
                r = mid-1;
        }

        d.pb(ans);
        act = ans+1;
    }


    // for(auto x : d) {
    //     cout << x << endl;
    // }

    for(int i = 1; i <= q; i++) {
        int x; cin >> x;
        auto it = lower_bound(all(d),x);
        if(it == d.end()) {
            cout << "oo" << endl;
        }
        else 
            cout << it-d.begin() << endl;
    }    

}

int32_t main() {
    ios::sync_with_stdio(false); cin.tie(0);

    // freopen("in.in", "r", stdin);
    //freopen("out.out", "w", stdout);

    int tt = 1;
    // cin >> tt;
    while(tt--) solve();

}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...