Submission #788960

#TimeUsernameProblemLanguageResultExecution timeMemory
788960aymanrsMeetings (IOI18_meetings)C++14
17 / 100
50 ms13608 KiB
#include <bits/stdc++.h>
using namespace std;
const int K = 18;
vector<long long> minimum_costs(vector<int> H, vector<int> L, vector<int> R){
    int n = H.size(), q = L.size();
    int nx[n], pr[n];
    int p = -1;
    for(int i = 0;i < n;i++) {
        if(H[i] == 2) p = i;
        pr[i] = p;
    }
    p = n;
    int sp[n][K];
    for(int i = n-1;i >= 0;i--){
        if(H[i] == 2) p = i;
        nx[i] = p;
        sp[i][0] = max(nx[i]-pr[i]-1, 0);
    }
    for(int k = 1;k < K;k++){
        for(int i = 0;i + (1<<k) <= n;i++){
            sp[i][k] = max(sp[i][k-1], sp[i+(1<<k-1)][k-1]);
        }
    }
    vector<long long> Q;
    if(H[0] > 2){
        Q.push_back(4000000001LL);
        return Q;
    }
    for(int i = 0;i < q;i++){
        int l = L[i], r = R[i];
        if(nx[l] > r) {
            Q.push_back(r-l+1);
            continue;
        }
        if(nx[l] >= pr[r]){
            Q.push_back((r-l+1)*2 - max(max(nx[l]-l, r-pr[r]), 0));
            continue;
        }
        int ans = max(max(nx[l]-l, r-pr[r]), 0);
        l = nx[l];
        r = pr[r];
        int d = r-l+1;
        for(int j = 0;j < K;j++){
            if(d&(1<<j)){
                ans = max(ans, sp[l][j]);
                l += 1<<j;
            }
        }
        Q.push_back(2*(R[i]-L[i]+1)-ans);
    }
    return Q;
}

Compilation message (stderr)

meetings.cpp: In function 'std::vector<long long int> minimum_costs(std::vector<int>, std::vector<int>, std::vector<int>)':
meetings.cpp:21:50: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
   21 |             sp[i][k] = max(sp[i][k-1], sp[i+(1<<k-1)][k-1]);
      |                                                 ~^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...