제출 #769594

#제출 시각아이디문제언어결과실행 시간메모리
769594YassirSalamaDistributing Candies (IOI21_candies)C++17
0 / 100
193 ms41184 KiB
#include "candies.h" #include<bits/stdc++.h> #include <vector> using namespace std; #define ll long long const int MAXN=2e5; ll tree[4*MAXN]; ll lazy[4*MAXN]; vector<int> cc; // int n; vector<int> ans; // int q; void push(int node,int l,int r){ if(lazy[node]){ tree[node]+=(r-l+1)*lazy[node]; if(l!=r) lazy[node<<1]+=lazy[node], lazy[node<<1|1]+=lazy[node]; lazy[node]=0; } } void update(int node,int l,int r,int ql,int qr,int v){ push(node,l,r); if(ql<=l&&r<=qr){ lazy[node]+=v; push(node,l,r); return; } int mid=(l+r)/2; if(ql<=mid) update(node<<1,l,mid,ql,qr,v); if(qr>mid) update(node<<1|1,mid+1,r,ql,qr,v); tree[node]=tree[node<<1]+tree[node<<1|1]; } void build(int node,int l,int r){ push(node,l,r); push(node<<1,l,(l+r)/2); push(node<<1|1,1+(l+r)/2,r); if(l==r){ if(cc[l]<tree[node]) ans.push_back(cc[l]); else ans.push_back((int)tree[node]); return; } int mid=(l+r)/2; build(node<<1,l,mid); build(node<<1|1,mid+1,r); } vector<int> distribute_candies(vector<int> c, vector<int> l, vector<int> r, vector<int> v) { memset(lazy,0LL,sizeof lazy); memset(tree,0LL,sizeof tree); for(int i=0;i<4*MAXN;i++) tree[i]=0,lazy[i]=0; int n = c.size(); int q = v.size(); ans.clear(); cc=c; for(int j=0;j<q;j++){ int lrr=l[j],rr=r[j],cc=v[j]; update(1,0,n-1,lrr,rr,cc); } // for(int i=0;i<n;i++){ // ll x=query(1,0,n-1,i); // s[i]=min(x,(long long)c[i]); // } build(1,0,n-1); return ans; }
#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...