#include "meetings.h"
#include<bits/stdc++.h>
#define ll long long
using namespace std;
struct lc
{
int a,l,r;
ll b,lazy;
lc():a(0),l(0),r(0),b(0x3fffffffffffffffLL),lazy(0){}
};
pair<int,int>aint[1<<21];
lc lt[1<<21],rt[1<<21];
vector<long long>ans;
vector<tuple<int,int,int>>q[750001];
pair<int,int> calc(int st,int dr)
{
pair<int,int>rez(-1,-1);
for(st+=1<<20,dr+=1<<20;st<=dr;st>>=1,dr>>=1){
if (st&1)
rez=max(rez,aint[st++]);
if (~dr&1)
rez=max(rez,aint[dr--]);
}
return rez;
}
void push(lc *aint,int nod,int st,int dr)
{
if (aint[nod].lazy){
aint[nod].b+=aint[nod].lazy;
if (st<dr){
aint[2*nod].lazy+=aint[nod].lazy;
aint[2*nod+1].lazy+=aint[nod].lazy;
}
aint[nod].lazy=0;
}
}
int semn(ll x)
{
if (x<0)
return -1;
return x>0;
}
void addlin(lc *aint,int l,int r,int a,long long b,int nod=1,int st=0,int dr=(1<<20)-1)
{
int mij=(st+dr)/2;
push(aint,nod,st,dr);
if (r<l || r<st || dr<l)
return;
if (l<=st && dr<=r){
ll st2=1LL*a*st+b,mij2=1LL*a*mij+b,dr2=1LL*a*dr+b,st3=1LL*aint[nod].a*st+aint[nod].b,mij3=1LL*aint[nod].a*mij+aint[nod].b,dr3=1LL*aint[nod].a*dr+aint[nod].b;
if (mij2<mij3){
swap(aint[nod].a,a);
swap(aint[nod].b,b);
swap(st3,st2);
swap(mij3,mij2);
swap(dr3,dr2);
}
if (st3<=st2 && dr3<=dr2)
return;
if (semn(st2-st3)*semn(mij2-mij3)<0 || mij2==mij3 && st2<st3)
addlin(aint,l,r,a,b,2*nod,st,mij);
else
addlin(aint,l,r,a,b,2*nod+1,mij+1,dr);
return;
}
addlin(aint,l,r,a,b,2*nod,st,mij);
addlin(aint,l,r,a,b,2*nod+1,mij+1,dr);
}
void add(lc *aint,int l,int r,ll val,int nod=1,int st=0,int dr=(1<<20)-1)
{
int mij=(st+dr)/2;
push(aint,nod,st,dr);
if (r<l || r<st || dr<l)
return;
if (l<=st && dr<=r){
aint[nod].lazy=val;
push(aint,nod,st,dr);
return;
}
add(aint,l,r,val,2*nod,st,mij);
add(aint,l,r,val,2*nod+1,mij+1,dr);
}
long long calcy(lc *aint,int poz,int nod=1,int st=0,int dr=(1<<20)-1)
{
int mij=(st+dr)/2;
push(aint,nod,st,dr);
if (st==dr)
return 1LL*aint[nod].a*poz+aint[nod].b;
return min(poz<=mij?calcy(aint,poz,2*nod,st,mij):calcy(aint,poz,2*nod+1,mij+1,dr),1LL*aint[nod].a*poz+aint[nod].b);
}
void solve(int st,int dr)
{
if (st>dr)
return;
auto [a,b]=calc(st,dr);
solve(st,b-1);
solve(b+1,dr);
for(auto [l,r,i]:q[b])
ans[i]=min(calcy(lt,l)+(r-b+1LL)*a,calcy(rt,r)+(b-l+1LL)*a);
add(lt,st,b-1,(dr-b+1LL)*a);
if (b<dr)
addlin(lt,st,b,-a,calcy(lt,b+1)+a*(b+1LL));
else
addlin(lt,st,b,-a,a*(b+1LL));
add(rt,b+1,dr,(b-st+1LL)*a);
if (st<b)
addlin(rt,b,dr,a,calcy(rt,b-1)+a*(1LL-b));
else
addlin(rt,b,dr,a,a*(1LL-b));
}
vector<long long> minimum_costs(vector<int>H,vector<int>L,vector<int>R)
{
int n=H.size(),m=L.size();
ans.resize(m);
int i;
for(i=0;i<n;i++)
aint[(1<<20)+i+1]={H[i],i+1};
for(i=(1<<20);--i;)
aint[i]=max(aint[2*i],aint[2*i+1]);
for(i=0;i<m;i++){
if (++L[i]<++R[i])
q[calc(L[i],R[i]).second].emplace_back(L[i],R[i],i);
else
ans[i]=H[L[i]-1];
}
solve(1,n);
return ans;
}
Compilation message
meetings.cpp: In function 'void addlin(lc*, int, int, int, long long int, int, int, int)':
meetings.cpp:60:53: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
60 | if (semn(st2-st3)*semn(mij2-mij3)<0 || mij2==mij3 && st2<st3)
| ~~~~~~~~~~~^~~~~~~~~~
meetings.cpp: In function 'void solve(int, int)':
meetings.cpp:95:7: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
95 | auto [a,b]=calc(st,dr);
| ^
meetings.cpp:98:11: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
98 | for(auto [l,r,i]:q[b])
| ^
meetings.cpp:103:5: warning: this 'else' clause does not guard... [-Wmisleading-indentation]
103 | else
| ^~~~
meetings.cpp:105:2: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'else'
105 | add(rt,b+1,dr,(b-st+1LL)*a);
| ^~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
94 ms |
157548 KB |
Output is correct |
2 |
Correct |
98 ms |
157548 KB |
Output is correct |
3 |
Correct |
108 ms |
157676 KB |
Output is correct |
4 |
Correct |
103 ms |
157548 KB |
Output is correct |
5 |
Correct |
98 ms |
157504 KB |
Output is correct |
6 |
Correct |
99 ms |
157932 KB |
Output is correct |
7 |
Correct |
101 ms |
157676 KB |
Output is correct |
8 |
Correct |
99 ms |
157804 KB |
Output is correct |
9 |
Correct |
100 ms |
157676 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
94 ms |
157548 KB |
Output is correct |
2 |
Correct |
98 ms |
157548 KB |
Output is correct |
3 |
Correct |
108 ms |
157676 KB |
Output is correct |
4 |
Correct |
103 ms |
157548 KB |
Output is correct |
5 |
Correct |
98 ms |
157504 KB |
Output is correct |
6 |
Correct |
99 ms |
157932 KB |
Output is correct |
7 |
Correct |
101 ms |
157676 KB |
Output is correct |
8 |
Correct |
99 ms |
157804 KB |
Output is correct |
9 |
Correct |
100 ms |
157676 KB |
Output is correct |
10 |
Correct |
122 ms |
158060 KB |
Output is correct |
11 |
Correct |
107 ms |
158060 KB |
Output is correct |
12 |
Correct |
107 ms |
158060 KB |
Output is correct |
13 |
Correct |
105 ms |
158060 KB |
Output is correct |
14 |
Correct |
108 ms |
158316 KB |
Output is correct |
15 |
Correct |
105 ms |
158060 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
94 ms |
157696 KB |
Output is correct |
2 |
Correct |
187 ms |
161336 KB |
Output is correct |
3 |
Correct |
424 ms |
172396 KB |
Output is correct |
4 |
Correct |
404 ms |
166156 KB |
Output is correct |
5 |
Correct |
303 ms |
170476 KB |
Output is correct |
6 |
Correct |
394 ms |
174188 KB |
Output is correct |
7 |
Correct |
447 ms |
175784 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
94 ms |
157696 KB |
Output is correct |
2 |
Correct |
187 ms |
161336 KB |
Output is correct |
3 |
Correct |
424 ms |
172396 KB |
Output is correct |
4 |
Correct |
404 ms |
166156 KB |
Output is correct |
5 |
Correct |
303 ms |
170476 KB |
Output is correct |
6 |
Correct |
394 ms |
174188 KB |
Output is correct |
7 |
Correct |
447 ms |
175784 KB |
Output is correct |
8 |
Correct |
389 ms |
166656 KB |
Output is correct |
9 |
Correct |
331 ms |
166404 KB |
Output is correct |
10 |
Correct |
350 ms |
166636 KB |
Output is correct |
11 |
Correct |
384 ms |
165996 KB |
Output is correct |
12 |
Correct |
339 ms |
165860 KB |
Output is correct |
13 |
Correct |
356 ms |
166380 KB |
Output is correct |
14 |
Correct |
405 ms |
172780 KB |
Output is correct |
15 |
Correct |
363 ms |
165796 KB |
Output is correct |
16 |
Correct |
419 ms |
172780 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
94 ms |
157548 KB |
Output is correct |
2 |
Correct |
98 ms |
157548 KB |
Output is correct |
3 |
Correct |
108 ms |
157676 KB |
Output is correct |
4 |
Correct |
103 ms |
157548 KB |
Output is correct |
5 |
Correct |
98 ms |
157504 KB |
Output is correct |
6 |
Correct |
99 ms |
157932 KB |
Output is correct |
7 |
Correct |
101 ms |
157676 KB |
Output is correct |
8 |
Correct |
99 ms |
157804 KB |
Output is correct |
9 |
Correct |
100 ms |
157676 KB |
Output is correct |
10 |
Correct |
122 ms |
158060 KB |
Output is correct |
11 |
Correct |
107 ms |
158060 KB |
Output is correct |
12 |
Correct |
107 ms |
158060 KB |
Output is correct |
13 |
Correct |
105 ms |
158060 KB |
Output is correct |
14 |
Correct |
108 ms |
158316 KB |
Output is correct |
15 |
Correct |
105 ms |
158060 KB |
Output is correct |
16 |
Correct |
94 ms |
157696 KB |
Output is correct |
17 |
Correct |
187 ms |
161336 KB |
Output is correct |
18 |
Correct |
424 ms |
172396 KB |
Output is correct |
19 |
Correct |
404 ms |
166156 KB |
Output is correct |
20 |
Correct |
303 ms |
170476 KB |
Output is correct |
21 |
Correct |
394 ms |
174188 KB |
Output is correct |
22 |
Correct |
447 ms |
175784 KB |
Output is correct |
23 |
Correct |
389 ms |
166656 KB |
Output is correct |
24 |
Correct |
331 ms |
166404 KB |
Output is correct |
25 |
Correct |
350 ms |
166636 KB |
Output is correct |
26 |
Correct |
384 ms |
165996 KB |
Output is correct |
27 |
Correct |
339 ms |
165860 KB |
Output is correct |
28 |
Correct |
356 ms |
166380 KB |
Output is correct |
29 |
Correct |
405 ms |
172780 KB |
Output is correct |
30 |
Correct |
363 ms |
165796 KB |
Output is correct |
31 |
Correct |
419 ms |
172780 KB |
Output is correct |
32 |
Correct |
2566 ms |
224744 KB |
Output is correct |
33 |
Correct |
1953 ms |
223684 KB |
Output is correct |
34 |
Correct |
2161 ms |
227760 KB |
Output is correct |
35 |
Correct |
2580 ms |
227380 KB |
Output is correct |
36 |
Correct |
1958 ms |
225460 KB |
Output is correct |
37 |
Correct |
2161 ms |
228128 KB |
Output is correct |
38 |
Correct |
2954 ms |
276692 KB |
Output is correct |
39 |
Correct |
2952 ms |
276868 KB |
Output is correct |
40 |
Correct |
2672 ms |
234876 KB |
Output is correct |
41 |
Correct |
2983 ms |
321672 KB |
Output is correct |
42 |
Correct |
3296 ms |
324516 KB |
Output is correct |
43 |
Correct |
3329 ms |
324304 KB |
Output is correct |
44 |
Correct |
3063 ms |
276296 KB |
Output is correct |