Submission #1242045

#TimeUsernameProblemLanguageResultExecution timeMemory
1242045dostsNile (IOI24_nile)C++20
67 / 100
2093 ms8260 KiB
#include "nile.h"
#include <bits/stdc++.h>
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2")
#define int long long
#define pii pair<int,int>
#define vi vector<int>
#define ff first
#define ss second
#define sp << " " <<
#define all(x) x.begin(),x.end()
#define big(x) ((int)(x.size()))
using namespace std;
const int MOD = 1e9+7, LIM = 1e6+1, inf = 2e18;

std::vector<long long> calculate_costs(std::vector<signed> W, std::vector<signed> A,
                                       std::vector<signed> B, std::vector<signed> E) {
    int N = big(W),Q = big(E);
    vi ord(N);
    iota(all(ord),0ll);
    sort(all(ord),[&](int x,int y) {
        return W[x] < W[y];
    });
    vi ww = vi(all(W)),aa = vi(all(A)),bb = vi(all(B));
    int smm = 0;
    for (int i = 0;i<N;i++) {
        W[i] = ww[ord[i]];
        A[i] = aa[ord[i]];
        B[i] = bb[ord[i]];
        smm+=A[i];
    }
    vi ans(Q);
    vi v(N);
    for (int i = 0;i<N;i++) {
        v[i] = A[i]-B[i];
    }

    for (int ii = 0;ii<Q;ii++) {
        int D = E[ii];
        ans[ii] = smm;
        for (int i=0;i<N;) {
            int j = i;
            int sm =  v[i];
            int mn = v[i];
            while (j < N-1 && W[j+1]-W[j] <= D) {
                j++;
                sm+=v[j];
                if ((j-i+1)%2) mn = min(mn,v[j]);
                else if (j>i && j < N-1 && W[j+1]-W[j-1] <= D) mn = min(mn,v[j]);
            }
            if ((j-i+1)%2 == 0) {
                ans[ii]-=sm;
            }
            else {
                ans[ii]-=sm-mn;
            }
            i = j+1;
        }
    }
    return ans;
}  
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...