diff --git a/solution/3400-3499/3495.Minimum Operations to Make Array Elements Zero/README.md b/solution/3400-3499/3495.Minimum Operations to Make Array Elements Zero/README.md index bb1da9e467fcc..fa1d6026b421f 100644 --- a/solution/3400-3499/3495.Minimum Operations to Make Array Elements Zero/README.md +++ b/solution/3400-3499/3495.Minimum Operations to Make Array Elements Zero/README.md @@ -110,25 +110,137 @@ tags: #### Python3 ```python - +class Solution: + def minOperations(self, queries: List[List[int]]) -> int: + def f(x: int) -> int: + res = 0 + p = i = 1 + while p <= x: + cnt = min(p * 4 - 1, x) - p + 1 + res += cnt * i + i += 1 + p *= 4 + return res + + ans = 0 + for l, r in queries: + s = f(r) - f(l - 1) + mx = f(r) - f(r - 1) + ans += max((s + 1) // 2, mx) + return ans ``` #### Java ```java - +class Solution { + public long minOperations(int[][] queries) { + long ans = 0; + for (int[] q : queries) { + int l = q[0], r = q[1]; + long s = f(r) - f(l - 1); + long mx = f(r) - f(r - 1); + ans += Math.max((s + 1) / 2, mx); + } + return ans; + } + + private long f(long x) { + long res = 0; + long p = 1; + int i = 1; + while (p <= x) { + long cnt = Math.min(p * 4 - 1, x) - p + 1; + res += cnt * i; + i++; + p *= 4; + } + return res; + } +} ``` #### C++ ```cpp - +class Solution { +public: + long long minOperations(vector>& queries) { + auto f = [&](long long x) { + long long res = 0; + long long p = 1; + int i = 1; + while (p <= x) { + long long cnt = min(p * 4 - 1, x) - p + 1; + res += cnt * i; + i++; + p *= 4; + } + return res; + }; + + long long ans = 0; + for (auto& q : queries) { + int l = q[0], r = q[1]; + long long s = f(r) - f(l - 1); + long long mx = f(r) - f(r - 1); + ans += max((s + 1) / 2, mx); + } + return ans; + } +}; ``` #### Go ```go +func minOperations(queries [][]int) (ans int64) { + f := func(x int64) (res int64) { + var p int64 = 1 + i := int64(1) + for p <= x { + cnt := min(p*4-1, x) - p + 1 + res += cnt * i + i++ + p *= 4 + } + return + } + for _, q := range queries { + l, r := int64(q[0]), int64(q[1]) + s := f(r) - f(l-1) + mx := f(r) - f(r-1) + ans += max((s+1)/2, mx) + } + return +} +``` +#### TypeScript + +```ts +function minOperations(queries: number[][]): number { + const f = (x: number): number => { + let res = 0; + let p = 1; + let i = 1; + while (p <= x) { + const cnt = Math.min(p * 4 - 1, x) - p + 1; + res += cnt * i; + i++; + p *= 4; + } + return res; + }; + + let ans = 0; + for (const [l, r] of queries) { + const s = f(r) - f(l - 1); + const mx = f(r) - f(r - 1); + ans += Math.max(Math.ceil(s / 2), mx); + } + return ans; +} ``` diff --git a/solution/3400-3499/3495.Minimum Operations to Make Array Elements Zero/README_EN.md b/solution/3400-3499/3495.Minimum Operations to Make Array Elements Zero/README_EN.md index 9edfec8f01d42..df1daa376a745 100644 --- a/solution/3400-3499/3495.Minimum Operations to Make Array Elements Zero/README_EN.md +++ b/solution/3400-3499/3495.Minimum Operations to Make Array Elements Zero/README_EN.md @@ -107,25 +107,137 @@ tags: #### Python3 ```python - +class Solution: + def minOperations(self, queries: List[List[int]]) -> int: + def f(x: int) -> int: + res = 0 + p = i = 1 + while p <= x: + cnt = min(p * 4 - 1, x) - p + 1 + res += cnt * i + i += 1 + p *= 4 + return res + + ans = 0 + for l, r in queries: + s = f(r) - f(l - 1) + mx = f(r) - f(r - 1) + ans += max((s + 1) // 2, mx) + return ans ``` #### Java ```java - +class Solution { + public long minOperations(int[][] queries) { + long ans = 0; + for (int[] q : queries) { + int l = q[0], r = q[1]; + long s = f(r) - f(l - 1); + long mx = f(r) - f(r - 1); + ans += Math.max((s + 1) / 2, mx); + } + return ans; + } + + private long f(long x) { + long res = 0; + long p = 1; + int i = 1; + while (p <= x) { + long cnt = Math.min(p * 4 - 1, x) - p + 1; + res += cnt * i; + i++; + p *= 4; + } + return res; + } +} ``` #### C++ ```cpp - +class Solution { +public: + long long minOperations(vector>& queries) { + auto f = [&](long long x) { + long long res = 0; + long long p = 1; + int i = 1; + while (p <= x) { + long long cnt = min(p * 4 - 1, x) - p + 1; + res += cnt * i; + i++; + p *= 4; + } + return res; + }; + + long long ans = 0; + for (auto& q : queries) { + int l = q[0], r = q[1]; + long long s = f(r) - f(l - 1); + long long mx = f(r) - f(r - 1); + ans += max((s + 1) / 2, mx); + } + return ans; + } +}; ``` #### Go ```go +func minOperations(queries [][]int) (ans int64) { + f := func(x int64) (res int64) { + var p int64 = 1 + i := int64(1) + for p <= x { + cnt := min(p*4-1, x) - p + 1 + res += cnt * i + i++ + p *= 4 + } + return + } + for _, q := range queries { + l, r := int64(q[0]), int64(q[1]) + s := f(r) - f(l-1) + mx := f(r) - f(r-1) + ans += max((s+1)/2, mx) + } + return +} +``` +#### TypeScript + +```ts +function minOperations(queries: number[][]): number { + const f = (x: number): number => { + let res = 0; + let p = 1; + let i = 1; + while (p <= x) { + const cnt = Math.min(p * 4 - 1, x) - p + 1; + res += cnt * i; + i++; + p *= 4; + } + return res; + }; + + let ans = 0; + for (const [l, r] of queries) { + const s = f(r) - f(l - 1); + const mx = f(r) - f(r - 1); + ans += Math.max(Math.ceil(s / 2), mx); + } + return ans; +} ``` diff --git a/solution/3400-3499/3495.Minimum Operations to Make Array Elements Zero/Solution.cpp b/solution/3400-3499/3495.Minimum Operations to Make Array Elements Zero/Solution.cpp new file mode 100644 index 0000000000000..0240f6a5f408e --- /dev/null +++ b/solution/3400-3499/3495.Minimum Operations to Make Array Elements Zero/Solution.cpp @@ -0,0 +1,26 @@ +class Solution { +public: + long long minOperations(vector>& queries) { + auto f = [&](long long x) { + long long res = 0; + long long p = 1; + int i = 1; + while (p <= x) { + long long cnt = min(p * 4 - 1, x) - p + 1; + res += cnt * i; + i++; + p *= 4; + } + return res; + }; + + long long ans = 0; + for (auto& q : queries) { + int l = q[0], r = q[1]; + long long s = f(r) - f(l - 1); + long long mx = f(r) - f(r - 1); + ans += max((s + 1) / 2, mx); + } + return ans; + } +}; diff --git a/solution/3400-3499/3495.Minimum Operations to Make Array Elements Zero/Solution.go b/solution/3400-3499/3495.Minimum Operations to Make Array Elements Zero/Solution.go new file mode 100644 index 0000000000000..108b102736c4e --- /dev/null +++ b/solution/3400-3499/3495.Minimum Operations to Make Array Elements Zero/Solution.go @@ -0,0 +1,20 @@ +func minOperations(queries [][]int) (ans int64) { + f := func(x int64) (res int64) { + var p int64 = 1 + i := int64(1) + for p <= x { + cnt := min(p*4-1, x) - p + 1 + res += cnt * i + i++ + p *= 4 + } + return + } + for _, q := range queries { + l, r := int64(q[0]), int64(q[1]) + s := f(r) - f(l-1) + mx := f(r) - f(r-1) + ans += max((s+1)/2, mx) + } + return +} diff --git a/solution/3400-3499/3495.Minimum Operations to Make Array Elements Zero/Solution.java b/solution/3400-3499/3495.Minimum Operations to Make Array Elements Zero/Solution.java new file mode 100644 index 0000000000000..bdc30cc48c800 --- /dev/null +++ b/solution/3400-3499/3495.Minimum Operations to Make Array Elements Zero/Solution.java @@ -0,0 +1,25 @@ +class Solution { + public long minOperations(int[][] queries) { + long ans = 0; + for (int[] q : queries) { + int l = q[0], r = q[1]; + long s = f(r) - f(l - 1); + long mx = f(r) - f(r - 1); + ans += Math.max((s + 1) / 2, mx); + } + return ans; + } + + private long f(long x) { + long res = 0; + long p = 1; + int i = 1; + while (p <= x) { + long cnt = Math.min(p * 4 - 1, x) - p + 1; + res += cnt * i; + i++; + p *= 4; + } + return res; + } +} diff --git a/solution/3400-3499/3495.Minimum Operations to Make Array Elements Zero/Solution.py b/solution/3400-3499/3495.Minimum Operations to Make Array Elements Zero/Solution.py new file mode 100644 index 0000000000000..f22b5b1eee559 --- /dev/null +++ b/solution/3400-3499/3495.Minimum Operations to Make Array Elements Zero/Solution.py @@ -0,0 +1,18 @@ +class Solution: + def minOperations(self, queries: List[List[int]]) -> int: + def f(x: int) -> int: + res = 0 + p = i = 1 + while p <= x: + cnt = min(p * 4 - 1, x) - p + 1 + res += cnt * i + i += 1 + p *= 4 + return res + + ans = 0 + for l, r in queries: + s = f(r) - f(l - 1) + mx = f(r) - f(r - 1) + ans += max((s + 1) // 2, mx) + return ans diff --git a/solution/3400-3499/3495.Minimum Operations to Make Array Elements Zero/Solution.ts b/solution/3400-3499/3495.Minimum Operations to Make Array Elements Zero/Solution.ts new file mode 100644 index 0000000000000..31f4165f76ebf --- /dev/null +++ b/solution/3400-3499/3495.Minimum Operations to Make Array Elements Zero/Solution.ts @@ -0,0 +1,22 @@ +function minOperations(queries: number[][]): number { + const f = (x: number): number => { + let res = 0; + let p = 1; + let i = 1; + while (p <= x) { + const cnt = Math.min(p * 4 - 1, x) - p + 1; + res += cnt * i; + i++; + p *= 4; + } + return res; + }; + + let ans = 0; + for (const [l, r] of queries) { + const s = f(r) - f(l - 1); + const mx = f(r) - f(r - 1); + ans += Math.max(Math.ceil(s / 2), mx); + } + return ans; +}