Submission #1335407

#TimeUsernameProblemLanguageResultExecution timeMemory
1335407activedeltorreDistributing Candies (IOI21_candies)C++20
0 / 100
73 ms13864 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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...