| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 1335407 | activedeltorre | Distributing Candies (IOI21_candies) | C++20 | 73 ms | 13864 KiB |
#include "candies.h"
#include <iostream>
#include <vector>
#include <cassert>
#include <cstdio>
#include <vector>
using namespace std;
long long maxim[200005];
int pozmax[200005];
long long minim[200005];
int pozmin[200005];
long long spar[200005];
std::vector<int> distribute_candies(std::vector<int> c, std::vector<int> l,
std::vector<int> r, std::vector<int> v) {
int n = c.size();
int q = l.size();
for(int i=1;i<=q;i++)
{
spar[i]=spar[i-1]+v[i-1];
}
maxim[q+1]=-1e15;
minim[q+1]=1e15;
for(int i=q;i>=0;i--)
{
if(spar[i]>maxim[i+1])
{
maxim[i]=spar[i];
pozmax[i]=i;
}
else
{
maxim[i]=maxim[i+1];
pozmax[i]=pozmax[i+1];
}
if(spar[i]<minim[i+1])
{
minim[i]=spar[i];
pozmin[i]=i;
}
else
{
minim[i]=minim[i+1];
pozmin[i]=pozmin[i+1];
}
}
vector<int>s;
for(int i=0;i<n;i++)
{
int st=0,dr=q;
while(st<=dr)
{
int mij=(st+dr)/2;
if(maxim[mij]-minim[mij]>=c[i])
{
st=mij+1;
}
else
{
dr=mij-1;
}
}
if(dr==-1)
{
// cout<<spar[n]<<" ";
s.push_back(spar[q]);
}
else
{
if(pozmin[dr]==dr)
{
//cout<<c[i]-(spar[pozmax[dr-1]]-spar[n])<<" ";
s.push_back(c[i]-(spar[pozmax[dr]]-spar[q]));
}
else
{
//cout<<spar[n]-spar[pozmin[dr-1]]<<" ";
s.push_back(spar[q]-spar[pozmin[dr]]);
}
}
}
return s;
}| # | 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... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
