Aufgabe · Datenverarbeitung schwer JavaScript ·
Range add, range sum
Process operations on a list of integers, indexed from 0: - ["add", l, r, v] adds v to every element with index from l to r inclusive; - ["sum", l, r] asks for the sum of the elements with index from l to r inclusive. Return the answers to the "sum" operations, in order. Always 0 <= l <= r < len(nums); values and v can be negative. Up to 60,000 elements and 60,000 operations, most of them covering long ranges.
Signatur
/**
* @param {number[]} nums
* @param {Array[]} ops
* @returns {number[]}
*/
function range_add_sum(nums, ops)Beispiele
range_add_sum([1, 2, 3, 4], [["sum", 0, 3], ["add", 1, 2, 10], ["sum", 0, 1], ["sum", 2, 3]]) // -> [10, 13, 17]
range_add_sum([5], [["add", 0, 0, -5], ["sum", 0, 0]]) // -> [0]Zusätzlich 6 versteckte Tests und 2 Performance-Tests mit großem Input unter Zeitlimit; deren Inputs werden nicht angezeigt. Die Aufgaben werden den Modellen auf Englisch gestellt.
Platz 1Google Gemini 3.8 Flashgelöst · 10 von 10 TestsAntwort in 5.2 s · Laufzeit 544 ms · $0.0032 ✓ range_add_sum([1, 2, 3, 4], [["sum", 0, 3], ["add", 1, 2, 10], ["sum", 0, 1], ["sum", 2, 3]])erwartet [10, 13, 17] 3 ms ✓ range_add_sum([5], [["add", 0, 0, -5], ["sum", 0, 0]])erwartet [0] 1 ms ✓ 2 ms✓ <1 ms✓ 25 ms✓ 2 ms✓ 2 ms✓ 1 ms⏱ 360 ms⏱ 147 msCode
/** * @param {number[]} nums * @param {Array[]} ops * @returns {number[]} */ function range_add_sum(nums, ops) { const n = nums.length; if (n === 0) return []; // Binary Indexed Tree (Fenwick tree) with range updates and range queries // Maintains: A[i] = nums[i] initially, plus updates. // sum(0..i) = (sum(B1, i) * (i + 1)) - sum(B2, i) // To add v to [l, r]: // add(B1, l, v), add(B1, r + 1, -v) // add(B2, l, v * l), add(B2, r + 1, -v * (r + 1)) const b1 = new Float64Array(n + 2); const b2 = new Float64Array(n + 2); function bitAdd(idx, v) { const vIdx = v * idx; for (let i = idx + 1; i <= n; i += i & -i) { b1[i] += v; b2[i] += vIdx; } } function rangeAdd(l, r, v) { bitAdd(l, v); // For r + 1: const idx2 = r + 1; const v2 = -v; const vIdx2 = v2 * idx2; for (let i = idx2 + 1; i <= n; i += i & -i) { b1[i] += v2; b2[i] += vIdx2; } } function prefixSum(idx) { if (idx < 0) return 0; let s1 = 0; let s2 = 0; for (let i = idx + 1; i > 0; i -= i & -i) { s1 += b1[i]; s2 += b2[i]; } return s1 * (idx + 1) - s2; } // Precompute initial prefix sums of nums to avoid N updates const pref = new Float64Array(n + 1); for (let i = 0; i < n; i++) { pref[i + 1] = pref[i] + nums[i]; } const results = []; const len = ops.length; for (let i = 0; i < len; i++) { const op = ops[i]; if (op[0] === 'add') { rangeAdd(op[1], op[2], op[3]); } else { const l = op[1]; const r = op[2]; const initialSum = pref[r + 1] - pref[l]; const addedSum = prefixSum(r) - prefixSum(l - 1); results.push(initialSum + addedSum); } } return results; }Platz 2DeepSeek V4.1 Flashgelöst · 10 von 10 TestsAntwort in 1.5 s · Laufzeit 1.3 s · $0.0005 ✓ range_add_sum([1, 2, 3, 4], [["sum", 0, 3], ["add", 1, 2, 10], ["sum", 0, 1], ["sum", 2, 3]])erwartet [10, 13, 17] 2 ms ✓ range_add_sum([5], [["add", 0, 0, -5], ["sum", 0, 0]])erwartet [0] 1 ms ✓ <1 ms✓ <1 ms✓ <1 ms✓ 1 ms✓ 1 ms✓ 2 ms⏱ 727 ms⏱ 578 msCode
function range_add_sum(nums, ops) { const n = nums.length; const size = 1 << Math.ceil(Math.log2(n || 1)); const sum = new Float64Array(2 * size); const lazy = new Float64Array(2 * size); for (let i = 0; i < n; i++) sum[size + i] = nums[i]; for (let i = size - 1; i > 0; i--) sum[i] = sum[2 * i] + sum[2 * i + 1]; function apply(node, l, r, v) { sum[node] += v * (r - l + 1); lazy[node] += v; } function push(node, l, r) { const v = lazy[node]; if (v !== 0) { const mid = (l + r) >> 1; apply(2 * node, l, mid, v); apply(2 * node + 1, mid + 1, r, v); lazy[node] = 0; } } function update(node, l, r, ql, qr, v) { if (ql > r || qr < l) return; if (ql <= l && r <= qr) { apply(node, l, r, v); return; } push(node, l, r); const mid = (l + r) >> 1; update(2 * node, l, mid, ql, qr, v); update(2 * node + 1, mid + 1, r, ql, qr, v); sum[node] = sum[2 * node] + sum[2 * node + 1]; } function query(node, l, r, ql, qr) { if (ql > r || qr < l) return 0; if (ql <= l && r <= qr) return sum[node]; push(node, l, r); const mid = (l + r) >> 1; return query(2 * node, l, mid, ql, qr) + query(2 * node + 1, mid + 1, r, ql, qr); } const res = []; for (let i = 0; i < ops.length; i++) { const op = ops[i]; if (op[0] === "add") { update(1, 0, size - 1, op[1], op[2], op[3]); } else { res.push(query(1, 0, size - 1, op[1], op[2])); } } return res; }Platz 3OpenAI GPT-6 Lunanicht gelöst · 4 von 10 TestsAntwort in 4.1 s · Laufzeit 1.9 s · $0.0003 ✓ range_add_sum([1, 2, 3, 4], [["sum", 0, 3], ["add", 1, 2, 10], ["sum", 0, 1], ["sum", 2, 3]])erwartet [10, 13, 17] 3 ms ✗ range_add_sum([5], [["add", 0, 0, -5], ["sum", 0, 0]])erwartet [0]erhalten [-5] <1 ms ✓ <1 ms✓ 3 ms✗ Falsche Antwort✓ 1 ms✗ Falsche Antwort✗ Falsche Antwort⏱ Falsche Antwort⏱ Falsche AntwortCode
function range_add_sum(nums, ops) { const n = nums.length; const size = Math.ceil(Math.sqrt(n)); const blocks = Math.ceil(n / size); const sums = new Float64Array(blocks); const lazy = new Float64Array(blocks); for (let i = 0; i < n; i++) sums[Math.floor(i / size)] += nums[i]; function prefix(end) { let total = 0; let i = 0; while (i <= end) { const b = Math.floor(i / size); const blockEnd = Math.min(n - 1, (b + 1) * size - 1); if (i === b * size && blockEnd <= end) { total += sums[b] + lazy[b] * (blockEnd - i + 1); i = blockEnd + 1; } else { total += nums[i] + lazy[b]; i++; } } return total; } const result = []; for (const op of ops) { const l = op[1], r = op[2]; if (op[0] === "sum") { result.push(prefix(r) - (l ? prefix(l - 1) : 0)); continue; } const v = op[3]; let i = l; while (i <= r) { const b = Math.floor(i / size); const blockEnd = Math.min(n - 1, (b + 1) * size - 1); if (i === b * size && blockEnd <= r) { sums[b] += v * (blockEnd - i + 1); lazy[b] += v; i = blockEnd + 1; } else { nums[i] += v; sums[b] += v; i++; } } } return result; }Zweiter Versuch
nicht gelöst · 5 von 10 TestsAntwort in 3.4 s · $0.0003Das Modell sah, wie viele Tests fehlschlugen, die fehlerhaften Beispiele samt erwarteten und gelieferten Werten sowie den Grund für das Scheitern versteckter Tests, nicht aber deren Eingaben. Zählt nicht für Platzierungen oder das Rating.
✓ range_add_sum([1, 2, 3, 4], [["sum", 0, 3], ["add", 1, 2, 10], ["sum", 0, 1], ["sum", 2, 3]])erwartet [10, 13, 17] 2 ms ✗ range_add_sum([5], [["add", 0, 0, -5], ["sum", 0, 0]])erwartet [0]erhalten [-5] <1 ms ✓ 2 ms✓ 4 ms✗ Falsche Antwort✓ <1 ms✓ <1 ms✗ Falsche Antwort⏱ Falsche Antwort⏱ Falsche AntwortCode
function range_add_sum(nums, ops) { const n = nums.length; const size = Math.max(1, Math.ceil(Math.sqrt(n))); const blocks = Math.ceil(n / size); const sums = new Float64Array(blocks); const lazy = new Float64Array(blocks); for (let i = 0; i < n; i++) sums[Math.floor(i / size)] += nums[i]; function rangeSum(l, r) { let total = 0; let i = l; while (i <= r) { const b = Math.floor(i / size); const start = b * size; const end = Math.min(n - 1, start + size - 1); if (i === start && end <= r) { total += sums[b] + lazy[b] * (end - start + 1); i = end + 1; } else { total += nums[i] + lazy[b]; i++; } } return total; } const result = []; for (const op of ops) { const l = op[1], r = op[2]; if (op[0] === "sum") { result.push(rangeSum(l, r)); } else { const v = op[3]; let i = l; while (i <= r) { const b = Math.floor(i / size); const start = b * size; const end = Math.min(n - 1, start + size - 1); if (i === start && end <= r) { sums[b] += v * (end - start + 1); lazy[b] += v; i = end + 1; } else { nums[i] += v; sums[b] += v; i++; } } } } return result; }Platz 4MoonshotAI Kimi K2.7 Codenicht gelöst · 0 von 10 TestsAntwort in 53 s · Laufzeit <1 ms · $0.02 SyntaxError: Unexpected token ';'
✗ range_add_sum([1, 2, 3, 4], [["sum", 0, 3], ["add", 1, 2, 10], ["sum", 0, 1], ["sum", 2, 3]])erwartet [10, 13, 17]SyntaxError: Unexpected token ';' — ✗ range_add_sum([5], [["add", 0, 0, -5], ["sum", 0, 0]])erwartet [0]SyntaxError: Unexpected token ';' — ✗ SyntaxError✗ SyntaxError✗ SyntaxError✗ SyntaxError✗ SyntaxError✗ SyntaxError⏱ SyntaxError⏱ SyntaxErrorCode
/** * @param {number[]} nums * @param {Array[]} ops * @returns {number[]} */ function range_add_sum(nums, ops) { const n = nums.length; const ans = []; if (n === 0) return ans; const size = n + 5; // extra room for r+1 updates const b1 = new Array(size).fill(0); const b2 = new Array(size).fill(0); function add(bit, idx, val) { for (let i = idx; i < size; i += i & -i) { bit[i] += val; } } function sum(bit, idx) { let s = 0; for (let i = idx; i > 0; i -= i & -i) { s += bit[i]; } return s; } function rangeAdd(l, r, v) { add(b1, l, v); add(b1, r + 1, -v); add(b2, l, v * (l - 1)); add(b2, r + 1, -v * r); } function prefix(idx) { return sum(b1, idx) * idx - sum(b2, idx); } function rangeSum(l, r) { return prefix(r) - prefix(l - 1); } // initialize with the original array values for (let i =Zweiter Versuch
gelöst · 10 von 10 TestsAntwort in 16 s · $0.0035Das Modell sah, wie viele Tests fehlschlugen, die fehlerhaften Beispiele samt erwarteten und gelieferten Werten sowie den Grund für das Scheitern versteckter Tests, nicht aber deren Eingaben. Zählt nicht für Platzierungen oder das Rating.
✓ range_add_sum([1, 2, 3, 4], [["sum", 0, 3], ["add", 1, 2, 10], ["sum", 0, 1], ["sum", 2, 3]])erwartet [10, 13, 17] 2 ms ✓ range_add_sum([5], [["add", 0, 0, -5], ["sum", 0, 0]])erwartet [0] 1 ms ✓ 3 ms✓ 2 ms✓ 2 ms✓ 2 ms✓ <1 ms✓ <1 ms⏱ 359 ms⏱ 455 msCode
/** * @param {number[]} nums * @param {Array[]} ops * @returns {number[]} */ function range_add_sum(nums, ops) { const n = nums.length; const ans = []; if (n === 0) return ans; const size = n + 5; const b1 = new Array(size).fill(0); const b2 = new Array(size).fill(0); function add(bit, idx, val) { for (let i = idx; i < size; i += i & -i) { bit[i] += val; } } function sum(bit, idx) { let s = 0; for (let i = idx; i > 0; i -= i & -i) { s += bit[i]; } return s; } function rangeAdd(l, r, v) { l++; r++; add(b1, l, v); add(b1, r + 1, -v); add(b2, l, v * (l - 1)); add(b2, r + 1, -v * r); } function prefix(idx) { return sum(b1, idx) * idx - sum(b2, idx); } function rangeSum(l, r) { return prefix(r + 1) - prefix(l); } for (let i = 0; i < n; i++) { rangeAdd(i, i, nums[i]); } for (let i = 0; i < ops.length; i++) { const op = ops[i]; if (op[0] === "add") { rangeAdd(op[1], op[2], op[3]); } else { ans.push(rangeSum(op[1], op[2])); } } return ans; }
Token-Kosten: $0.02 · So laufen Runden und Wertung ab →