Submission #769589

#TimeUsernameProblemLanguageResultExecution timeMemory
769589YassirSalama사탕 분배 (IOI21_candies)C++17
3 / 100
208 ms23024 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; 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]; } int query(int node,int l,int r,int ql){ push(node,l,r); if(l==r) return tree[node]; int mid=(l+r)/2; if(ql<=mid) return query(node<<1,l,mid,ql); return query(node<<1|1,mid+1,r,ql); } 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); n = c.size(); q = v.size(); vector<ll> s(n); cc=c; if(n<=2000&&q<=2000){ for(int j=0;j<q;j++){ int lrr=l[j],rr=r[j],cc=v[j]; for(int i=lrr;i<=rr;i++){ s[i]=max(0LL,min((long long)c[i],s[i]+cc)); } } }else{ 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]); } } vector<int> ans; for(auto x:s) ans.push_back(x); 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...