제출 #1215479

#제출 시각아이디문제언어결과실행 시간메모리
1215479thelegendary08사탕 분배 (IOI21_candies)C++17
8 / 100
88 ms13640 KiB
#include "candies.h" #include<bits/stdc++.h> #define int long long #define vi vector<long long> #define f0r(i,n) for(int i = 0; i<n; i++) #define mp make_pair #define pb push_back #define FOR(i, k, n) for(int i = k; i<n; i++) #define pii pair<int,int> #define dout(x) cout<<x<<' '<<#x<<'\n'; #define vout(x) for(auto u : x)cout<<u<<' '; cout<<'\n'; #define vvi vector<vi> #define vb vector<bool> using namespace std; struct rupq{ int n; vi tree; rupq(int x){ n = x; tree.resize(4 * n + 5); } void add(int k, int x){ k += n; tree[k] += x; for(k/=2; k>=1; k/=2)tree[k] = tree[k * 2] + tree[k*2+1]; } long long quer(int l, int r){ l += n; r += n; int ret = 0; while(l <= r){ if(l % 2 == 1)ret += tree[l++]; if(r % 2 == 0)ret += tree[r--]; l/=2; r/=2; } return ret; } void rangeadd(int l, int r, int x){ add(l, x); if(r != n-1){ add(r+1, -x); } } long long pointquer(int x){ return quer(0, x); } }; std::vector<signed> distribute_candies(std::vector<signed> c, std::vector<signed> l, std::vector<signed> r, std::vector<signed> v) { int n = c.size(); vector<signed> ans(n); int q = l.size(); rupq s = rupq(n); f0r(i, q){ s.rangeadd(l[i], r[i], v[i]); } f0r(i,n){ ans[i] = min((int)c[i], s.pointquer(i)); } 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...