#include "meetings.h"
#include <bits/stdc++.h>
using namespace std;
struct lichao
{
int A, l, r;
long long B, lazy;
lichao() : A(0), l(0), r(0), B(0x3fffffffffffffffLL), lazy(0) {}
};
const int SZ=1<<20;
pair<int,int> Mtree[2*SZ];
lichao ltree[2*SZ], rtree[2*SZ];
vector<long long> res;
vector<tuple<int,int,int>> Q[750001];
pair<int,int> get_max(int s, int e)
{
pair<int,int> ret(-1,-1);
for(s+=SZ,e+=SZ;s<=e;s>>=1,e>>=1) {
if(s&1) ret=max(ret,Mtree[s++]);
if(~e&1) ret=max(ret,Mtree[e--]);
}
return ret;
}
void lazy_propagation(lichao *tree, int bit, int s, int e)
{
if(tree[bit].lazy) {
tree[bit].B+=tree[bit].lazy;
if(s<e) {
tree[2*bit].lazy+=tree[bit].lazy;
tree[2*bit+1].lazy+=tree[bit].lazy;
}
tree[bit].lazy=0;
}
}
int get_sign(long long a)
{
return a<0 ? -1:a>0;
}
void add_line(lichao *tree, int n1, int n2, int A, long long B, int bit=1, int s=0, int e=SZ-1)
{
int m=(s+e)>>1;
lazy_propagation(tree,bit,s,e);
if(n2<n1 || n2<s || e<n1) return;
if(n1<=s && e<=n2) {
int &pA=tree[bit].A;
long long &pB=tree[bit].B, ys=1LL*A*s+B, ym=1LL*A*m+B, ye=1LL*A*e+B, pys=1LL*pA*s+pB, pym=1LL*pA*m+pB, pye=1LL*pA*e+pB;
if(ym<pym) {
swap(pA,A); swap(pB,B);
swap(pys,ys); swap(pym,ym); swap(pye,ye);
}
if(pys<=ys && pye<=ye) return;
if(get_sign(ys-pys)*get_sign(ym-pym)<0 || ym==pym && ys<pys) add_line(tree,n1,n2,A,B,2*bit,s,m);
else add_line(tree,n1,n2,A,B,2*bit+1,m+1,e);
return;
}
add_line(tree,n1,n2,A,B,2*bit,s,m);
add_line(tree,n1,n2,A,B,2*bit+1,m+1,e);
}
void add_tree(lichao *tree, int n1, int n2, long long v, int bit=1, int s=0, int e=SZ-1)
{
int m=(s+e)>>1;
lazy_propagation(tree,bit,s,e);
if(n2<n1 || n2<s || e<n1) return;
if(n1<=s && e<=n2) {
tree[bit].lazy=v;
lazy_propagation(tree,bit,s,e);
return;
}
add_tree(tree,n1,n2,v,2*bit,s,m);
add_tree(tree,n1,n2,v,2*bit+1,m+1,e);
}
long long get_y(lichao *tree, int x, int bit=1, int s=0, int e=SZ-1)
{
int m=(s+e)>>1;
lazy_propagation(tree,bit,s,e);
if(s==e) return 1LL*tree[bit].A*x+tree[bit].B;
return min(x<=m ? get_y(tree,x,2*bit,s,m):get_y(tree,x,2*bit+1,m+1,e),1LL*tree[bit].A*x+tree[bit].B);
}
void solve(int s, int e)
{
if(s>e) return;
auto[M,m]=get_max(s,e);
solve(s,m-1);
solve(m+1,e);
for(auto[l,r,i]: Q[m]) res[i]=min(get_y(ltree,l)+(r-m+1LL)*M,get_y(rtree,r)+(m-l+1LL)*M);
add_tree(ltree,s,m-1,(e-m+1LL)*M);
add_line(ltree,s,m,-M,(m<e ? get_y(ltree,m+1):0)+M*(m+1LL));
add_tree(rtree,m+1,e,(m-s+1LL)*M);
add_line(rtree,m,e,M,(s<m ? get_y(rtree,m-1):0)+M*(1LL-m));
}
vector<long long> minimum_costs(vector<int> H, vector<int> L, vector<int> R)
{
int N=H.size(), M=L.size();
res.resize(M);
for(int i=0;i<N;i++) Mtree[SZ+i+1]={H[i],i+1};
for(int i=SZ;--i;) Mtree[i]=max(Mtree[2*i],Mtree[2*i+1]);
for(int i=0;i<M;i++) {
if(++L[i]<++R[i]) Q[get_max(L[i],R[i]).second].emplace_back(L[i],R[i],i);
else res[i]=H[L[i]-1];
}
solve(1,N);
return res;
}
Compilation message
meetings.cpp: In function 'void add_line(lichao*, int, int, int, long long int, int, int, int)':
meetings.cpp:59:53: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
if(get_sign(ys-pys)*get_sign(ym-pym)<0 || ym==pym && ys<pys) add_line(tree,n1,n2,A,B,2*bit,s,m);
~~~~~~~~^~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
137 ms |
157560 KB |
Output is correct |
2 |
Correct |
141 ms |
157532 KB |
Output is correct |
3 |
Correct |
149 ms |
157564 KB |
Output is correct |
4 |
Correct |
141 ms |
157560 KB |
Output is correct |
5 |
Correct |
142 ms |
157560 KB |
Output is correct |
6 |
Correct |
141 ms |
157708 KB |
Output is correct |
7 |
Correct |
159 ms |
157568 KB |
Output is correct |
8 |
Correct |
143 ms |
157816 KB |
Output is correct |
9 |
Correct |
142 ms |
157852 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
137 ms |
157560 KB |
Output is correct |
2 |
Correct |
141 ms |
157532 KB |
Output is correct |
3 |
Correct |
149 ms |
157564 KB |
Output is correct |
4 |
Correct |
141 ms |
157560 KB |
Output is correct |
5 |
Correct |
142 ms |
157560 KB |
Output is correct |
6 |
Correct |
141 ms |
157708 KB |
Output is correct |
7 |
Correct |
159 ms |
157568 KB |
Output is correct |
8 |
Correct |
143 ms |
157816 KB |
Output is correct |
9 |
Correct |
142 ms |
157852 KB |
Output is correct |
10 |
Correct |
152 ms |
158044 KB |
Output is correct |
11 |
Correct |
150 ms |
157948 KB |
Output is correct |
12 |
Correct |
150 ms |
158072 KB |
Output is correct |
13 |
Correct |
150 ms |
158072 KB |
Output is correct |
14 |
Correct |
151 ms |
158352 KB |
Output is correct |
15 |
Correct |
149 ms |
158096 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
135 ms |
157560 KB |
Output is correct |
2 |
Correct |
206 ms |
161424 KB |
Output is correct |
3 |
Correct |
453 ms |
172408 KB |
Output is correct |
4 |
Correct |
412 ms |
166012 KB |
Output is correct |
5 |
Correct |
348 ms |
170488 KB |
Output is correct |
6 |
Correct |
452 ms |
174256 KB |
Output is correct |
7 |
Correct |
478 ms |
175668 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
135 ms |
157560 KB |
Output is correct |
2 |
Correct |
206 ms |
161424 KB |
Output is correct |
3 |
Correct |
453 ms |
172408 KB |
Output is correct |
4 |
Correct |
412 ms |
166012 KB |
Output is correct |
5 |
Correct |
348 ms |
170488 KB |
Output is correct |
6 |
Correct |
452 ms |
174256 KB |
Output is correct |
7 |
Correct |
478 ms |
175668 KB |
Output is correct |
8 |
Correct |
421 ms |
166736 KB |
Output is correct |
9 |
Correct |
378 ms |
166360 KB |
Output is correct |
10 |
Correct |
401 ms |
166776 KB |
Output is correct |
11 |
Correct |
415 ms |
165868 KB |
Output is correct |
12 |
Correct |
376 ms |
165820 KB |
Output is correct |
13 |
Correct |
390 ms |
166328 KB |
Output is correct |
14 |
Correct |
448 ms |
172408 KB |
Output is correct |
15 |
Correct |
395 ms |
165680 KB |
Output is correct |
16 |
Correct |
452 ms |
172636 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
137 ms |
157560 KB |
Output is correct |
2 |
Correct |
141 ms |
157532 KB |
Output is correct |
3 |
Correct |
149 ms |
157564 KB |
Output is correct |
4 |
Correct |
141 ms |
157560 KB |
Output is correct |
5 |
Correct |
142 ms |
157560 KB |
Output is correct |
6 |
Correct |
141 ms |
157708 KB |
Output is correct |
7 |
Correct |
159 ms |
157568 KB |
Output is correct |
8 |
Correct |
143 ms |
157816 KB |
Output is correct |
9 |
Correct |
142 ms |
157852 KB |
Output is correct |
10 |
Correct |
152 ms |
158044 KB |
Output is correct |
11 |
Correct |
150 ms |
157948 KB |
Output is correct |
12 |
Correct |
150 ms |
158072 KB |
Output is correct |
13 |
Correct |
150 ms |
158072 KB |
Output is correct |
14 |
Correct |
151 ms |
158352 KB |
Output is correct |
15 |
Correct |
149 ms |
158096 KB |
Output is correct |
16 |
Correct |
135 ms |
157560 KB |
Output is correct |
17 |
Correct |
206 ms |
161424 KB |
Output is correct |
18 |
Correct |
453 ms |
172408 KB |
Output is correct |
19 |
Correct |
412 ms |
166012 KB |
Output is correct |
20 |
Correct |
348 ms |
170488 KB |
Output is correct |
21 |
Correct |
452 ms |
174256 KB |
Output is correct |
22 |
Correct |
478 ms |
175668 KB |
Output is correct |
23 |
Correct |
421 ms |
166736 KB |
Output is correct |
24 |
Correct |
378 ms |
166360 KB |
Output is correct |
25 |
Correct |
401 ms |
166776 KB |
Output is correct |
26 |
Correct |
415 ms |
165868 KB |
Output is correct |
27 |
Correct |
376 ms |
165820 KB |
Output is correct |
28 |
Correct |
390 ms |
166328 KB |
Output is correct |
29 |
Correct |
448 ms |
172408 KB |
Output is correct |
30 |
Correct |
395 ms |
165680 KB |
Output is correct |
31 |
Correct |
452 ms |
172636 KB |
Output is correct |
32 |
Correct |
2563 ms |
224464 KB |
Output is correct |
33 |
Correct |
2037 ms |
223392 KB |
Output is correct |
34 |
Correct |
2266 ms |
227120 KB |
Output is correct |
35 |
Correct |
2597 ms |
227220 KB |
Output is correct |
36 |
Correct |
2036 ms |
225260 KB |
Output is correct |
37 |
Correct |
2184 ms |
227676 KB |
Output is correct |
38 |
Correct |
3042 ms |
276696 KB |
Output is correct |
39 |
Correct |
2986 ms |
276468 KB |
Output is correct |
40 |
Correct |
2468 ms |
234100 KB |
Output is correct |
41 |
Correct |
2975 ms |
321284 KB |
Output is correct |
42 |
Correct |
3210 ms |
324328 KB |
Output is correct |
43 |
Correct |
3257 ms |
324064 KB |
Output is correct |
44 |
Correct |
2952 ms |
276268 KB |
Output is correct |