이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "meetings.h"
#include <bits/stdc++.h>
#define x first
#define y second
using namespace std;
typedef long long ll;
typedef pair <int,int> pi;
typedef vector <int> vec;
typedef vector <ll> vecl;
using namespace std;
const int INF = 9;
int n,Q;
vecl ans;
int a[7500005];
struct Tree {int l,r,mx,s;}t[4000005];
Tree f(Tree l,Tree r) {
Tree ret;
ret.s = l.s&r.s;
ret.l = (l.s ? l.mx+r.l : l.l);
ret.r = (r.s ? r.mx+l.r : r.r);
ret.mx = max({l.mx,r.mx,l.r+r.l});
return ret;
}
void build(int x,int l,int r) {
if(l == r) {
if(a[l] == 1) t[x] = {1,1,1,1};
else t[x] = {0,0,0,0};
return;
}
int mid = (l + r) >> 1;
build(x*2,l,mid), build(x*2+1,mid+1,r);
t[x] = f(t[x*2],t[x*2+1]);
}
Tree query(int x,int l,int r,int rl,int rr) {
if(rl > r||l > rr) return {0,0,0,0};
if(rl <= l&&r <= rr) return t[x];
int mid = (l + r) >> 1;
return f(query(x*2,l,mid,rl,rr),query(x*2+1,mid+1,r,rl,rr));
}
void debug(int x,int l,int r) {
//cout << l << " ~ " << r << " : " << t[x].x << ' ' << t[x].cnt << '\n';
if(l == r) {
return;
}
int mid = (l + r) >> 1;
debug(x*2,l,mid), debug(x*2+1,mid+1,r);
t[x] = f(t[x*2],t[x*2+1]);
}
vecl minimum_costs(vec H,vec L,vec R) {
n = H.size(), Q = L.size();
for(int i = 0;i < n;i++) a[i+1] = H[i];
ans.resize(Q);
build(1,1,n);
for(int t = 0;t < Q;t++) {
int l = L[t]+1, r = R[t]+1;
Tree val = query(1,1,n,l,r);
ans[t] = 2*(r-l+1)-val.mx;
}
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... |