#include "meetings.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> line;
typedef pair<int,int> ii;
#define fi first
#define se second
#define lc 2*i+1
#define rc 2*i+2
#define pb push_back
#define LINF 1023456789123456789
#define pf printf
#define maxn 750005
int n,q;
vector<int> h;
vector<ll> ans;
struct query{
int l,r,i;
};
vector<query> qrys[maxn];
ll eval(line l,ll x){
return l.fi*x+l.se;
}
struct seg{
ii v[maxn*4];
void init(int i,int s,int e){
if(s==e){v[i]={h[s],s};return;}
int m=(s+e)>>1;
init(lc,s,m);
init(rc,m+1,e);
v[i]=max(v[lc],v[rc]);
}
void init(){
init(0,0,n-1);
}
ii qry(int i,int s,int e,int x,int y){
if(s==x&&e==y)return v[i];
int m=(s+e)>>1;
if(y<=m)return qry(lc,s,m,x,y);
if(x>m)return qry(rc,m+1,e,x,y);
return max(qry(lc,s,m,x,m),qry(rc,m+1,e,m+1,y));
}
int qry(int x,int y){
return qry(0,0,n-1,x,y).se;
}
}maxseg;
struct lichao{
int s,e,m;
lichao *l,*r;
line val={0,LINF};
ll lz=0;
lichao(int _s,int _e){
s=_s;e=_e;m=(s+e)>>1;
if(s!=e){
l=new lichao(s,m);
r=new lichao(m+1,e);
}
}
void ppo(){
val.se+=lz;
if(s!=e)l->lz+=lz,r->lz+=lz;
lz=0;
}
void insert(int x,int y,line v){
if(x>y)return;
ppo();
if(s==x&&e==y){
if(eval(v,m)<eval(val,m))swap(v,val);
if(s==e)return;
if(eval(v,s)>=eval(val,s)&&eval(v,e)>=eval(val,e))return;
if(eval(v,s)<eval(val,s))l->insert(x,m,v);
else r->insert(m+1,y,v);
}
if(y<=m)l->insert(x,y,v);
else if(x>m)r->insert(x,y,v);
else l->insert(x,m,v),r->insert(m+1,y,v);
}
void add(int x,int y,ll v){
if(x>y)return;
if(s==x&&e==y){lz+=v;return;}
if(y<=m)l->add(x,y,v);
else if(x>m)r->add(x,y,v);
else l->add(x,m,v),r->add(m+1,y,v);
}
ll qry(int x){
ppo();
if(s==x&&e==x)return eval(val,x);
if(x<=m)return min(eval(val,x),l->qry(x));
else return min(eval(val,x),r->qry(x));
}
}*llct,*rlct;
void solve(int l,int r){
if(l>r)return;
int m=maxseg.qry(l,r);
solve(l,m-1);
solve(m+1,r);
llct->insert(m,m,{0,0});
rlct->insert(m,m,{0,0});
for(query &q:qrys[m]){
ans[q.i]=min(llct->qry(q.l)+(ll)(q.r-m+1)*h[m],
rlct->qry(q.r)+(ll)(m-q.l+1)*h[m]);
}
llct->add(l,m,(ll)(r-m+1)*h[m]);
llct->insert(l,m,{-h[m],(ll)(m+1)*h[m]+(m==r?0:llct->qry(m+1))});
rlct->add(m,r,(ll)(m-l+1)*h[m]);
rlct->insert(m,r,{h[m],(ll)(1-m)*h[m]+(l==m?0:rlct->qry(m-1))});
}
vector<ll> minimum_costs(vector<int> _h,vector<int> l,vector<int> r){
n=_h.size();
q=l.size();
h=_h;
maxseg.init();
ans.resize(q);
for(int i=0;i<q;++i){
int m=maxseg.qry(l[i],r[i]);
qrys[m].pb({l[i],r[i],i});
}
llct=new lichao(0,n-1);
rlct=new lichao(0,n-1);
solve(0,n-1);
return ans;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
10 ms |
17916 KB |
Output is correct |
2 |
Correct |
17 ms |
18700 KB |
Output is correct |
3 |
Correct |
14 ms |
18772 KB |
Output is correct |
4 |
Correct |
14 ms |
18732 KB |
Output is correct |
5 |
Correct |
13 ms |
18772 KB |
Output is correct |
6 |
Correct |
14 ms |
18964 KB |
Output is correct |
7 |
Correct |
13 ms |
18800 KB |
Output is correct |
8 |
Correct |
13 ms |
18988 KB |
Output is correct |
9 |
Correct |
15 ms |
18800 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
10 ms |
17916 KB |
Output is correct |
2 |
Correct |
17 ms |
18700 KB |
Output is correct |
3 |
Correct |
14 ms |
18772 KB |
Output is correct |
4 |
Correct |
14 ms |
18732 KB |
Output is correct |
5 |
Correct |
13 ms |
18772 KB |
Output is correct |
6 |
Correct |
14 ms |
18964 KB |
Output is correct |
7 |
Correct |
13 ms |
18800 KB |
Output is correct |
8 |
Correct |
13 ms |
18988 KB |
Output is correct |
9 |
Correct |
15 ms |
18800 KB |
Output is correct |
10 |
Correct |
21 ms |
19708 KB |
Output is correct |
11 |
Correct |
21 ms |
19628 KB |
Output is correct |
12 |
Correct |
23 ms |
19728 KB |
Output is correct |
13 |
Correct |
21 ms |
19748 KB |
Output is correct |
14 |
Correct |
21 ms |
19996 KB |
Output is correct |
15 |
Correct |
20 ms |
19764 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
10 ms |
17876 KB |
Output is correct |
2 |
Correct |
59 ms |
23788 KB |
Output is correct |
3 |
Correct |
311 ms |
59656 KB |
Output is correct |
4 |
Correct |
281 ms |
53060 KB |
Output is correct |
5 |
Correct |
253 ms |
60716 KB |
Output is correct |
6 |
Correct |
262 ms |
61308 KB |
Output is correct |
7 |
Correct |
335 ms |
62692 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
10 ms |
17876 KB |
Output is correct |
2 |
Correct |
59 ms |
23788 KB |
Output is correct |
3 |
Correct |
311 ms |
59656 KB |
Output is correct |
4 |
Correct |
281 ms |
53060 KB |
Output is correct |
5 |
Correct |
253 ms |
60716 KB |
Output is correct |
6 |
Correct |
262 ms |
61308 KB |
Output is correct |
7 |
Correct |
335 ms |
62692 KB |
Output is correct |
8 |
Correct |
266 ms |
53696 KB |
Output is correct |
9 |
Correct |
247 ms |
53280 KB |
Output is correct |
10 |
Correct |
247 ms |
53612 KB |
Output is correct |
11 |
Correct |
266 ms |
52988 KB |
Output is correct |
12 |
Correct |
238 ms |
52676 KB |
Output is correct |
13 |
Correct |
233 ms |
53240 KB |
Output is correct |
14 |
Correct |
275 ms |
59600 KB |
Output is correct |
15 |
Correct |
295 ms |
52652 KB |
Output is correct |
16 |
Correct |
306 ms |
59740 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
10 ms |
17916 KB |
Output is correct |
2 |
Correct |
17 ms |
18700 KB |
Output is correct |
3 |
Correct |
14 ms |
18772 KB |
Output is correct |
4 |
Correct |
14 ms |
18732 KB |
Output is correct |
5 |
Correct |
13 ms |
18772 KB |
Output is correct |
6 |
Correct |
14 ms |
18964 KB |
Output is correct |
7 |
Correct |
13 ms |
18800 KB |
Output is correct |
8 |
Correct |
13 ms |
18988 KB |
Output is correct |
9 |
Correct |
15 ms |
18800 KB |
Output is correct |
10 |
Correct |
21 ms |
19708 KB |
Output is correct |
11 |
Correct |
21 ms |
19628 KB |
Output is correct |
12 |
Correct |
23 ms |
19728 KB |
Output is correct |
13 |
Correct |
21 ms |
19748 KB |
Output is correct |
14 |
Correct |
21 ms |
19996 KB |
Output is correct |
15 |
Correct |
20 ms |
19764 KB |
Output is correct |
16 |
Correct |
10 ms |
17876 KB |
Output is correct |
17 |
Correct |
59 ms |
23788 KB |
Output is correct |
18 |
Correct |
311 ms |
59656 KB |
Output is correct |
19 |
Correct |
281 ms |
53060 KB |
Output is correct |
20 |
Correct |
253 ms |
60716 KB |
Output is correct |
21 |
Correct |
262 ms |
61308 KB |
Output is correct |
22 |
Correct |
335 ms |
62692 KB |
Output is correct |
23 |
Correct |
266 ms |
53696 KB |
Output is correct |
24 |
Correct |
247 ms |
53280 KB |
Output is correct |
25 |
Correct |
247 ms |
53612 KB |
Output is correct |
26 |
Correct |
266 ms |
52988 KB |
Output is correct |
27 |
Correct |
238 ms |
52676 KB |
Output is correct |
28 |
Correct |
233 ms |
53240 KB |
Output is correct |
29 |
Correct |
275 ms |
59600 KB |
Output is correct |
30 |
Correct |
295 ms |
52652 KB |
Output is correct |
31 |
Correct |
306 ms |
59740 KB |
Output is correct |
32 |
Correct |
2775 ms |
285896 KB |
Output is correct |
33 |
Correct |
1882 ms |
285216 KB |
Output is correct |
34 |
Correct |
1962 ms |
287864 KB |
Output is correct |
35 |
Correct |
2449 ms |
288224 KB |
Output is correct |
36 |
Correct |
1850 ms |
285528 KB |
Output is correct |
37 |
Correct |
1949 ms |
288184 KB |
Output is correct |
38 |
Correct |
2500 ms |
338436 KB |
Output is correct |
39 |
Correct |
2519 ms |
338448 KB |
Output is correct |
40 |
Correct |
2432 ms |
294272 KB |
Output is correct |
41 |
Correct |
2597 ms |
383576 KB |
Output is correct |
42 |
Correct |
3032 ms |
386092 KB |
Output is correct |
43 |
Correct |
3016 ms |
385872 KB |
Output is correct |
44 |
Correct |
2836 ms |
337860 KB |
Output is correct |