제출 #1046323

#제출 시각아이디문제언어결과실행 시간메모리
1046323Malix사탕 분배 (IOI21_candies)C++17
11 / 100
264 ms12964 KiB
#include "candies.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef vector<int> vi; typedef vector<vi> vii; typedef pair<int,int> pi; typedef vector<pi> pii; typedef tuple<int,int,int> tii; #define REP(i,a,b) for(int i=a;i<b;i++) #define F first #define S second #define PB push_back #define MP make_pair #define LSOne(s) ((s)&(-s)) ll INF=1e18+10; int inf=1e9+10; ll M=1e9+7; vector<ll> ft; int n,q; void update(int x,ll y){ x++; while(x<n+1){ ft[x]+=y; x+=LSOne(x); } } ll solve(int x){ x++; ll ans=0; while(x){ ans+=ft[x]; x-=LSOne(x); } return ans; } std::vector<int> distribute_candies(std::vector<int> c, std::vector<int> l, std::vector<int> r, std::vector<int> v) { n=c.size(),q=l.size(); if(n<=2000){ vi ans(n,0); REP(i,0,q)REP(j,l[i],r[i]+1)ans[j]=max(0,min(c[j],ans[j]+v[i])); return ans; } vi ans(n); ft.resize(n+1,0); REP(i,0,q){ update(l[i],(ll)v[i]); update(r[i]+1,(ll)(-v[i])); } REP(i,0,n){ ll x=solve(i); if(x>1e9)x=1e9; ans[i]=min(c[i],(int)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...