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...