#include <bits/stdc++.h>
#define pb push_back
#define fst first
#define snd second
#define fore(i,a,b) for(int i=a,pao=b;i<pao;++i)
#define SZ(x) ((int)x.size())
#define ALL(x) x.begin(),x.end()
#define mset(a,v) memset((a),(v),sizeof(a))
#define FIN ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
using namespace std;
typedef long long ll;
const int MAXN=2e5+5;
struct Nodo{
int mn=0,mx=0,lz=0;
};
Nodo st[MAXN*4];
int n,lim;
std::vector<int> distribute_candies(std::vector<int> c, std::vector<int> l,
std::vector<int> r, std::vector<int> v) {
n=SZ(c);
int q=SZ(l);
vector<int>p(q),sufMax(q),sufMin(q);
fore(i,0,q){
p[i]=v[i];
if(i)p[i]+=p[i-1];
}
for(int i=q-1;i>=0;i--){
sufMax[i]=sufMin[i]=p[i];
if(i<q-1)sufMax[i]=max(sufMax[i],sufMax[i+1]);
if(i<q-1)sufMin[i]=min(sufMin[i],sufMin[i+1]);
}
vector<int>ret(n);
fore(i,0,n){
int l=0,r=q-1;
while(r-l>1){
int m=(l+r)/2;
if(sufMax[m]-sufMin[m]>=c[i]){
l=m;
}else r=m;
}
ret[i]=p[l]>=c[i]?c[i]+p[q-1]-p[l]:p[q-1]-p[l];
if(ret[i]<0)ret[i]=0;
if(ret[i]>c[i])ret[i]=c[i];
}
return ret;
}
| # | 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... |