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"holiday.h"
#include <bits/stdc++.h>
using namespace std;
#define mp make_pair
#define fr first
#define sc second
long long nn=0,p[2],sm,dd,inf=1e18;
queue<pair<pair<long long,long long>,pair<long long,long long>>> q;
multiset<long long> ms[2];
multiset<long long>::iterator it;
void blc()
{
for(;nn<dd&&!ms[1].empty();nn++)
{
it=ms[1].end();
it--;
ms[0].insert(*it);
sm+=*it;
ms[1].erase(it);
}
for(;nn>dd&&!ms[0].empty();nn--)
{
it=ms[0].begin();
ms[1].insert(*it);
sm-=*it;
ms[0].erase(it);
}
}
long long findMaxAttraction(int n, int st, int d, int a[])
{
long long i,ii,iii,lh,rh,md,lb,rb,w,mx,e,z=-inf;
pair<long long,long long> mxe;
for(ii=0;ii<2;ii++)
{
p[0]=inf;
q.push({{max(st-d,0),st},{max(st-d,0),n-1}});
for(;!q.empty();)
{
lh=q.front().fr.fr;
rh=q.front().fr.sc;
lb=q.front().sc.fr;
rb=q.front().sc.sc;
q.pop();
if(lh>rh)
{
continue;
}
md=(lh+rh)/2;
if(md<p[0])
{
for(iii=0;iii<2;iii++)
{
p[iii]=-iii;
ms[iii].clear();
}
nn=0;
sm=0;
dd=d-st+1;
}
mxe={-inf,-1};
for(i=max(lb,md);i<=rb;i++)
{
for(;p[1]<i;)
{
p[1]++;
ms[0].insert(a[p[1]]);
nn++;
sm+=a[p[1]];
dd--;
blc();
}
for(;p[0]<md;p[0]++)
{
it=ms[0].find(a[p[0]]);
if(it!=ms[0].end())
{
ms[0].erase(it);
nn--;
sm-=a[p[0]];
}
else
{
ms[1].erase(ms[1].find(a[p[0]]));
}
dd+=2;
blc();
}
w=sm;
if(dd<0)
{
w=-inf;
}
mxe=max(mxe,{w,i});
}
mx=mxe.fr;
e=mxe.sc;
z=max(z,mx);
q.push({{lh,md-1},{lb,e}});
q.push({{md+1,rh},{e,rb}});
}
st=n-1-st;
for(i=0;i<=n/2;i++)
{
swap(a[i],a[n-1-i]);
}
}
return z;
}
# | 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... |