Submission #623460

#TimeUsernameProblemLanguageResultExecution timeMemory
623460truc12a2cvpDistributing Candies (IOI21_candies)C++17
27 / 100
312 ms23868 KiB
#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int, int> II; const int N = 2e5 + 5, logN = 20; const int MOD = 1e9 + 7; const ll INF = 1e9; struct F{ int L, R, sum; F(int _L = 0, int _R = 0, int _sum = 0) : L(_L), R(_R), sum(_sum) {} F operator + (const F& op) const{ return F(max(op.L, min(op.R, L + op.sum)), max(op.L, min(op.R, R + op.sum)), sum + op.sum); } }; int C; struct ST_lazy{ int n; vector<F> ST; ST_lazy(int _n = 0){ n = _n; ST.resize(4 * n + 5); } void down(int id, int l, int r){ if(l == r) return; ST[id * 2] = ST[id * 2] + ST[id]; ST[id * 2 + 1] = ST[id * 2 + 1] + ST[id]; ST[id] = F(0, C, 0); } void update(int id, int l, int r, int u, int v, int add){ down(id, l, r); if(r < u || v < l) return; if(u <= l && r <= v){ ST[id] = ST[id] + F(0, C, add); return; } int mid = l + r >> 1; update(id * 2, l, mid, u, v, add); update(id * 2 + 1, mid + 1, r, u, v, add); } int get(int id, int l, int r, int i){ down(id, l, r); if(l == r) return max(ST[id].L, min(ST[id].R, ST[id].sum)); int mid = l + r >> 1; if(i <= mid) return get(id * 2, l, mid, i); return get(id * 2 + 1, mid + 1, r, i); } }; vector<int> distribute_candies(vector<int> c, vector<int> l, vector<int> r, vector<int> v){ int n = c.size(), q = l.size(); ST_lazy ST(n); C = c[0]; for(int i = 0; i < q; i ++){ ST.update(1, 1, n, l[i] + 1, r[i] + 1, v[i]); } vector<int> ans; for(int i = 1; i <= n; i ++) ans.push_back(ST.get(1, 1, n, i)); return ans; }

Compilation message (stderr)

candies.cpp: In member function 'void ST_lazy::update(int, int, int, int, int, int)':
candies.cpp:41:27: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   41 |               int mid = l + r >> 1;
      |                         ~~^~~
candies.cpp: In member function 'int ST_lazy::get(int, int, int, int)':
candies.cpp:48:27: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   48 |               int mid = l + r >> 1;
      |                         ~~^~~
#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...