# | TimeUTC-0 | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
330894 | 12tqian | Examination (JOI19_examination) | C++17 | 2569 ms | 373868 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
using namespace std;
const int SZ = (1 << 18);
// [0, SZ - 1) queries for each axis
template<class T> struct Node {
T val = 0;
Node<T>* c[2];
Node() { c[0] = c[1] = NULL; }
void upd(int ind, T v, int L = 0, int R = SZ - 1) { // add v
if (L == ind && R == ind) { val += v; return; }
int M = (L + R) / 2;
if (ind <= M) {
if (!c[0]) c[0] = new Node();
c[0]->upd(ind, v, L, M);
} else {
if (!c[1]) c[1] = new Node();
c[1]->upd(ind, v, M + 1, R);
}
val = 0;
for (int i = 0; i < 2; i++)
if (c[i]) val += c[i]->val;
}
T query(int lo, int hi, int L = 0, int R = SZ - 1) { // query sum of segment
if (hi < L || R < lo) return 0;
if (lo <= L && R <= hi) return val;
int M = (L + R) / 2;
T res = 0;
if (c[0]) res += c[0]->query(lo, hi, L, M);
if (c[1]) res += c[1]->query(lo, hi, M + 1, R);
return res;
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |