This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "meetings.h"
#ifndef EVAL
#include "grader.cpp"
#endif
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN = 1e5+5;
int n;
struct node{
ll pr, sf, ans, sz;
}t[MAXN*2];
node merge(node &l, node &r){
node res = {0,0,0,l.sz + r.sz};
if(l.pr == l.sz)res.pr = l.sz + r.pr;
else res.pr = l.pr;
if(r.sf == r.sz)res.sf = r.sz + l.sf;
else res.sf = r.sf;
res.ans = max(l.sf + r.pr, max(res.pr, res.sf));
return res;
}
int query(int l,int r){
node resl = {0,0,0,0}, resr = {0,0,0,0};
for(l+=n,r+=n; l<=r; l>>=1,r>>=1){
if(l&1)resl = merge(resl, t[l++]);
if(!(r&1))resr=merge(t[r--],resr);
}return merge(resl,resr).ans;
}
vector<ll> minimum_costs(vector<int> h, vector<int> L, vector<int> R){
n = h.size();
int Q = L.size();
for(int i=0;i<n;i++){
if(h[i] == 1)t[i+n] = {1,1,1,1};
else t[i+n] = {0,0,0,1};
}for(int i=n-1;i>0;i--)t[i] = merge(t[i<<1],t[i<<1|1]);
vector<ll> ret;
for(int q=0;q<Q;q++){
int l = L[q], r = R[q];
ll res = query(l,r);
res += (r-l+1-res)*2;
ret.push_back(res);
}return ret;
}
# | 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... |