Submission #1302907

#TimeUsernameProblemLanguageResultExecution timeMemory
1302907vtnooDistributing Candies (IOI21_candies)C++20
0 / 100
69 ms9640 KiB
#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<n-1)sufMax[i]=max(sufMax[i],sufMax[i+1]);
		if(i<n-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];
	}
	return ret;
}
#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...