Skip to content

Commit dfe9d10

Browse files
authoredJun 11, 2023
Update 2031.Count-Subarrays-With-More-Ones-Than-Zeros.cpp
1 parent b4636e2 commit dfe9d10

File tree

1 file changed

+27
-16
lines changed

1 file changed

+27
-16
lines changed
 

‎Segment_Tree/2031.Count-Subarrays-With-More-Ones-Than-Zeros/2031.Count-Subarrays-With-More-Ones-Than-Zeros.cpp

+27-16
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,29 @@
1-
const int MAX_N = 200003;
2-
using LL = long long;
3-
4-
class Solution {
5-
int OFFSET = 100001;
6-
long long bitArr[MAX_N];
7-
long long nums[MAX_N]; // Note: nums is 1-index
1+
class BIT{
2+
public:
3+
int N;
4+
vector<long long>bitArr; // Note: all arrays are 1-index
5+
vector<long long>nums;
86
long long M = 1e9+7;
97

10-
// increase nums[i] by delta (1-index)
8+
void init(int N)
9+
{
10+
this->N = N;
11+
bitArr.resize(N+1);
12+
nums.resize(N+1);
13+
}
14+
15+
// increase nums[i] by delta
1116
void updateDelta(int i, long long delta) {
1217
int idx = i;
13-
while (idx <= MAX_N)
18+
while (idx <= N)
1419
{
1520
bitArr[idx]+=delta;
1621
bitArr[idx] %= M;
1722
idx+=idx&(-idx);
1823
}
1924
}
2025

21-
// sum of a range nums[1:j] inclusively, 1-index
26+
// sum of a range nums[1:j] inclusively
2227
long long queryPreSum(int idx){
2328
long long result = 0;
2429
while (idx){
@@ -32,23 +37,29 @@ class Solution {
3237
// sum of a range nums[i:j] inclusively
3338
long long sumRange(int i, int j) {
3439
return queryPreSum(j)-queryPreSum(i-1);
35-
}
36-
40+
}
41+
};
42+
43+
using LL = long long;
44+
LL OFFSET = 1e5+10;
45+
LL M = 1e9+7;
46+
class Solution {
3747
public:
3848
int subarraysWithMoreZerosThanOnes(vector<int>& nums)
3949
{
40-
cout<<nums.size()<<endl;
50+
BIT bit;
51+
bit.init(2*OFFSET);
4152
int diff = 0;
4253
LL ret = 0;
43-
updateDelta(0+OFFSET, 1);
54+
bit.updateDelta(0+OFFSET, 1);
4455

4556
for (int i=0; i<nums.size(); i++)
4657
{
4758
if (nums[i]==1) diff++;
4859
else diff--;
4960

50-
ret = (ret + queryPreSum(diff-1+OFFSET)) % M;
51-
updateDelta(diff+OFFSET, 1);
61+
ret = (ret + bit.queryPreSum(diff-1+OFFSET)) % M;
62+
bit.updateDelta(diff+OFFSET, 1);
5263
}
5364
return ret;
5465
}

0 commit comments

Comments
 (0)
Please sign in to comment.