Submission #1302927

#TimeUsernameProblemLanguageResultExecution timeMemory
1302927vtnooDistributing Candies (IOI21_candies)C++20
0 / 100
65 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<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]==sufMin[l]?p[q-1]-p[l]:c[i]-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 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...