#include "nile.h"
#include <bits/stdc++.h>
using namespace std;
vector<long long> calculate_costs(vector<int> W, vector<int> A, vector<int> B, vector<int> E) {
long long n = A.size();
vector<array<long long,3>>boxes(n);
for(long long i = 0;i<n;i++){
boxes[i]={W[i],A[i],B[i]};
}
sort(boxes.begin(),boxes.end());
int q = E.size();
set<pair<long long, int>>diffs;
for(int i = 0;i<n-1;i++){
diffs.insert({boxes[i+1][0]-boxes[i][0],i});
}
vector<long long>ans(q);
vector<array<int,2>>queries(q);
for(int i = 0;i<q;i++){
queries[i]={E[i],i};
}
sort(queries.begin(),queries.end());
auto it = diffs.begin();
long long cur = 0;
set<array<int,2>>rangs;
for(int i = 0;i<q;i++){
while(it!=diffs.end()&&(*it).first<=queries[i][0]){
pair<long long,int>p = *it;
int ind = p.second;
rangs.insert({ind,ind});
cur++;
auto up = rangs.lower_bound({ind,1000000000});
if(up!=rangs.end()){
if((*up)[0]==ind+1){
//merge.
int t = (*up)[1];
int len = t-(*up)[0]+1;
cur-=(len+1)/2;
rangs.erase(up);
cur--;
rangs.erase({ind,ind});
rangs.insert({ind,t});
cur+=(len+2)/2;
}
else{
//nothing happens
}
}
up=rangs.lower_bound({ind,-1});
//this contains ind.
if(up!=rangs.begin()){
up--;
//up is now down
if((*up)[1]==ind-1){
//merge
int b = (*up)[0];
int u = (*up)[1];
int len = u-b+1;
cur-=(len+1)/2;
rangs.erase(up);
up=rangs.lower_bound({ind,-1});
int ru = (*up)[1];
cur-=(ru-(*up)[0]+1+1)/2;
rangs.erase(up);
rangs.insert({b,ru});
cur+=(ru-b+1+1)/2;
}
else{
//nothing happens
}
}
it++;
}
//cur is now number of pairs
ans[queries[i][1]]=(n-cur)*2;
}
return ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |