# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
404015 | ScarletS | Po (COCI21_po) | C++17 | 763 ms | 8032 KiB |
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 <bits/stdc++.h>
#define ll long long
#define sz(x) (int)(x).size()
using namespace std;
const int mn = 1e5+7, INF = 1e9+7;
int n,segTree[mn<<2],lazy[mn<<2],ans;
int val(int i)
{
return segTree[i] + lazy[i];
}
void recalc(int i)
{
segTree[i]=min(val((i<<1)+1),val((i<<1)+2));
}
void passDown(int i)
{
lazy[(i<<1)+1]+=lazy[i];
lazy[(i<<1)+2]+=lazy[i];
lazy[i]=0;
}
void build(int i, int l, int r)
{
if (l==r)
{
cin>>segTree[i];
return;
}
build((i<<1)+1,l,l+((r-l)>>1));
build((i<<1)+2,l+((r-l)>>1)+1,r);
segTree[i]=min(segTree[(i<<1)+1],segTree[(i<<1)+2]);
}
void update(int i, int cL, int cR, int l, int r, int x)
{
if (r<cL||cR<l)
return;
if (l<=cL&&cR<=r)
{
lazy[i]+=x;
return;
}
passDown(i);
update((i<<1)+1,cL,cL+((cR-cL)>>1),l,r,x);
update((i<<1)+2,cL+((cR-cL)>>1)+1,cR,l,r,x);
recalc(i);
}
void query(int i, int cL, int cR, int l, int r)
{
//cout<<i<<" "<<cL<<" "<<cR<<" "<<l<<" "<<r<<"\n";
if (r<cL||cR<l)
return;
if (l<=cL&&cR<=r)
{
ans=min(ans,val(i));
return;
}
passDown(i);
query((i<<1)+1,cL,cL+((cR-cL)>>1),l,r);
query((i<<1)+2,cL+((cR-cL)>>1)+1,cR,l,r);
recalc(i);
}
int f(int L, int R)
{
//cout<<L<<" "<<R<<"\n";
if (R<L)
return 0;
int rV=0,l,r,m;
ans=INF;
query(0,1,n,L,R);
if (ans)
{
++rV;
update(0,1,n,L,R,-ans);
}
ans=0;
while (ans==0&&L<=R)
{
ans=INF;
query(0,1,n,L,L);
if (ans==0)
++L;
}
ans=0;
while (ans==0&&L<=R)
{
ans=INF;
query(0,1,n,R,R);
if (ans==0)
--R;
}
if (R<L)
return rV;
l=L;r=R;
while (l^r)
{
m=l+(r-l)/2+1;
ans=INF;
query(0,1,n,L,m);
if (ans==0)
r=m-1;
else
l=m;
}
return rV + f(L,l) + f(l+1,R);
}
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0);
cin>>n;
build(0,1,n);
cout<<f(1,n);
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |