Submission #816302

#TimeUsernameProblemLanguageResultExecution timeMemory
816302QwertyPiBrunhilda’s Birthday (BOI13_brunhilda)C++14
96.35 / 100
1014 ms114160 KiB
#include <bits/stdc++.h>
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("Ofast")
using namespace std;

const int MAXN = 1e7 + 11;
const int MAXM = 1e5 + 11;
int p[MAXM];
int lp[MAXN], dp[MAXN], c[MAXN], c2[MAXN], cm = 0;

int32_t main(){
    cin.tie(0); cout.tie(0)->sync_with_stdio(false);
    int n, Q; cin >> n >> Q;
    for(int i = 0; i < n; i++) cin >> p[i]; sort(p, p + n);
    for(int i = 0; i < n; i++){
        for(int j = p[i]; j < MAXN; j += p[i]){
            if(!lp[j]) lp[j] = p[i];
        }
    }

    dp[1] = 0; c2[0] = n; cm = 0;
    for(int i = 2; i < MAXN; i++){
        int x = i;
        while(lp[x] != 0){
            if(lp[x] != lp[x / lp[x]]){
                c2[c[lp[x]]]--;
                while(cm < MAXN - 1 && c2[cm] == 0) cm++;
            }
            x /= lp[x];
        }
        int cur = cm;
        x = i;
        while(lp[x] != 0){
            if(lp[x] != lp[x / lp[x]]){
                c[lp[x]] = cur + 1; c2[cur + 1]++;
            }
            x /= lp[x];
        }
        dp[i] = cur + 1;
    }
    for(int i = 0; i < Q; i++){
        int k; cin >> k; cout << (dp[k] != MAXN ? to_string(dp[k]) : "oo") << '\n';
    }
}

Compilation message (stderr)

brunhilda.cpp: In function 'int32_t main()':
brunhilda.cpp:14:5: warning: this 'for' clause does not guard... [-Wmisleading-indentation]
   14 |     for(int i = 0; i < n; i++) cin >> p[i]; sort(p, p + n);
      |     ^~~
brunhilda.cpp:14:45: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'for'
   14 |     for(int i = 0; i < n; i++) cin >> p[i]; sort(p, p + n);
      |                                             ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...