Submission #441430

#TimeUsernameProblemLanguageResultExecution timeMemory
441430daniel920712Distributing Candies (IOI21_candies)C++17
0 / 100
5082 ms31544 KiB
#include "candies.h" #include <vector> #include <stdio.h> #include <stdlib.h> #include <iostream> using namespace std; long long tt; struct A { long long l,r; long long big,small; long long add; A *nxl,*nxr; void UPD() { nxl->add+=add; nxl->big+=add; nxl->small+=add; nxl->big=min(nxl->big,big); nxl->small=max(nxl->small,small); nxr->add+=add; nxr->big+=add; nxr->small+=add; nxr->big=min(nxr->big,big); nxr->small=max(nxr->small,small); add=0; } void build(long long ll,long long rr) { l=ll; r=rr; add=0; if(rr==ll+1) return; nxl=(A*) malloc(sizeof(A)); nxr=(A*) malloc(sizeof(A)); nxl->build(ll,(ll+rr)/2); nxr->build((ll+rr)/2,rr); } void cha(long long ll,long long rr,long long con) { if(l==ll&&r==rr) { add+=con; big+=con; small+=con; big=min(big,tt); big=max(big,(long long) 0); small=max(small,(long long) 0); small=min(small,tt); return; } UPD(); if(rr<=(l+r)/2) nxl->cha(ll,rr,con); else if(ll>=(l+r)/2) nxr->cha(ll,rr,con); else { nxl->cha(ll,(l+r)/2,con); nxr->cha((l+r)/2,rr,con); } big=max(nxl->big,nxr->big); small=min(nxl->small,nxr->small); } long long Find(long long where) { if(where==l&&where+1==r) { if(big!=small) while(1); return big; } UPD(); if(where<(l+r)/2) return nxl->Find(where); else return nxr->Find(where); } }; vector < int > ans; vector < int > distribute_candies(vector < int > c, vector < int > l,vector < int > r, vector < int > v) { long long N=(long long) c.size(),M=(long long) l.size(),i; tt=c[0]; A* root=(A*) malloc(sizeof(A)); root->build(0,N); for(i=0;i<M;i++) root->cha(l[i],r[i]+1,v[i]); //printf("aa\n"); for(i=0;i<N;i++) ans.push_back((int) min((long long)c[i],root->Find(i))); return ans; } /* 5 1 2 3 4 5 2 0 2 1 1 4 5 */
#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...