Compile Error
foo.cc:2:1: error: 'vector' does not name a type
2 | vector<vector<int>> t(4 * N, vector<int> (32));
| ^~~~~~
foo.cc:10:42: error: 'vector' has not been declared
10 | void build(int node, int st, int en, vector<ll> &arr) { //=> O(N)
| ^~~~~~
foo.cc:10:48: error: expected ',' or '...' before '<' token
10 | void build(int node, int st, int en, vector<ll> &arr) { //=> O(N)
| ^
foo.cc:27:52: error: 'll' has not been declared
27 | void update(int node, int st, int en, int idx, ll val) { //=> O(log n)
| ^~
foo.cc: In member function 'auto Segment_Tree::merge(auto:1&, auto:2&)':
foo.cc:6:9: error: 'vector' was not declared in this scope
6 | vector<int> tmp(32);
| ^~~~~~
foo.cc:6:16: error: expected primary-expression before 'int'
6 | vector<int> tmp(32);
| ^~~
foo.cc:7:37: error: 'tmp' was not declared in this scope
7 | for(int b = 0; b < 32; b++) tmp[b] = l[b] + r[b];
| ^~~
foo.cc:8:16: error: 'tmp' was not declared in this scope
8 | return tmp;
| ^~~
foo.cc: In member function 'void Segment_Tree::build(int, int, int, int)':
foo.cc:13:13: error: 'bitset' was not declared in this scope
13 | bitset<32> b1 = arr[st];
| ^~~~~~
foo.cc:13:24: error: 'b1' was not declared in this scope
13 | bitset<32> b1 = arr[st];
| ^~
foo.cc:13:29: error: 'arr' was not declared in this scope
13 | bitset<32> b1 = arr[st];
| ^~~
foo.cc:14:41: error: 't' was not declared in this scope
14 | for(int b = 0; b < 32; b++) t[node][b] = b1[b];
| ^
foo.cc:18:35: error: 'arr' was not declared in this scope
18 | build(node << 1, st, mid, arr); // divide left side
| ^~~
foo.cc:21:21: error: 't' was not declared in this scope
21 | auto &Cur = t[node];
| ^
foo.cc: In member function 'void Segment_Tree::update(int, int, int, int, int)':
foo.cc:29:13: error: 'bitset' was not declared in this scope
29 | bitset<32> b1 = val;
| ^~~~~~
foo.cc:29:24: error: 'b1' was not declared in this scope
29 | bitset<32> b1 = val;
| ^~
foo.cc:31:20: error: 't' was not declared in this scope
31 | if(t[node][b] == 1 && b1[b] == 0) t[node][b] = 1;
| ^
foo.cc:42:21: error: 't' was not declared in this scope
42 | auto &Cur = t[node];
| ^
foo.cc: In member function 'auto Segment_Tree::query(int, int, int, int, int)':
foo.cc:50:20: error: 'vector' was not declared in this scope
50 | return vector<int> (32, 0); // <== careful
| ^~~~~~
foo.cc:50:27: error: expected primary-expression before 'int'
50 | return vector<int> (32, 0); // <== careful
| ^~~
foo.cc:50:27: error: expected ';' before 'int'
foo.cc:50:30: error: expected unqualified-id before '>' token
50 | return vector<int> (32, 0); // <== careful
| ^
foo.cc:53:20: error: 't' was not declared in this scope
53 | return t[node];
| ^
foo.cc: At global scope:
foo.cc:63:1: error: 'll' does not name a type
63 | ll mod = 1e9 + 7;
| ^~
foo.cc:65:1: error: 'll' does not name a type
65 | ll Pow(ll a, ll b) { // O(log b)
| ^~
foo.cc: In function 'void solve()':
foo.cc:77:5: error: 'll' was not declared in this scope
77 | ll n, q;
| ^~
foo.cc:78:5: error: 'cin' was not declared in this scope
78 | cin >> n >> q;
| ^~~
foo.cc:78:12: error: 'n' was not declared in this scope
78 | cin >> n >> q;
| ^
foo.cc:78:17: error: 'q' was not declared in this scope
78 | cin >> n >> q;
| ^
foo.cc:79:5: error: 'vector' was not declared in this scope
79 | vector<ll> v(n + 1);
| ^~~~~~
foo.cc:79:16: error: 'v' was not declared in this scope
79 | vector<ll> v(n + 1);
| ^
foo.cc:81:11: error: expected ';' before 'x'
81 | ll x; cin >> x;
| ^~
| ;
foo.cc:81:22: error: 'x' was not declared in this scope
81 | ll x; cin >> x;
| ^
foo.cc:98:15: error: expected ';' before 'sum'
98 | ll sum = 0, sz = r - l + 1;
| ^~~~
| ;
foo.cc:100:19: error: expected ';' before 'cnt0'
100 | ll cnt0 = sz - bitCnt[b];
| ^~~~~
| ;
foo.cc:101:19: error: expected ';' before 'cnt1'
101 | ll cnt1 = bitCnt[b];
| ^~~~~
| ;
foo.cc:102:20: error: 'cnt1' was not declared in this scope
102 | if(cnt1 > 0) {
| ^~~~
foo.cc:103:23: error: expected ';' before 'totCom'
103 | ll totCom = (Pow(2, cnt1 - 1) * Pow(2, cnt0)) % mod; // (nC1 + nC3 + ...+ nClastOdd = 2^(n - 1)) * (nC0 + nC1 + ...+nCn = 2^n)
| ^~~~~~~
| ;
foo.cc:104:21: error: 'sum' was not declared in this scope
104 | sum += (totCom * Pow(2, b)) % mod;
| ^~~
foo.cc:104:29: error: 'totCom' was not declared in this scope
104 | sum += (totCom * Pow(2, b)) % mod;
| ^~~~~~
foo.cc:104:38: error: 'Pow' was not declared in this scope
104 | sum += (totCom * Pow(2, b)) % mod;
| ^~~
foo.cc:104:51: error: 'mod' was not declared in this scope
104 | sum += (totCom * Pow(2, b)) % mod;
| ^~~
foo.cc:108:13: error: 'cout' was not declared in this scope
108 | cout << sum << endl;
| ^~~~
foo.cc:108:21: error: 'sum' was not declared in this scope
108 | cout << sum << endl;
| ^~~
foo.cc:108:28: error: 'endl' was not declared in this scope
108 | cout << sum << endl;
| ^~~~
Code
const int N = 2e5 + 9;
vector<vector<int>> t(4 * N, vector<int> (32));
struct Segment_Tree {
auto merge(auto &l, auto &r) { // <== Change this function
vector<int> tmp(32);
for(int b = 0; b < 32; b++) tmp[b] = l[b] + r[b];
return tmp;
}
void build(int node, int st, int en, vector<ll> &arr) { //=> O(N)
if (st == en) {
// t[node] = arr[st];
bitset<32> b1 = arr[st];
for(int b = 0; b < 32; b++) t[node][b] = b1[b];
return;
}
int mid = (st + en) >> 1;
build(node << 1, st, mid, arr); // divide left side
build(node << 1 | 1, mid + 1, en, arr); // divide right side
// Merging left and right portion
auto &Cur = t[node];
auto &Left = t[node << 1];
auto &Right = t[node << 1 | 1];
Cur = merge(Left, Right);
return;
}
void update(int node, int st, int en, int idx, ll val) { //=> O(log n)
if (st == en) {
bitset<32> b1 = val;
for(int b = 0; b < 32; b++) {
if(t[node][b] == 1 && b1[b] == 0) t[node][b] = 1;
else if(t[node][b] == 0 && b1[b] == 1) t[node][b] = 1;
else if(t[node][b] == 1 && b1[b] == 1) t[node][b] = 0;
}
// t[node] = val;
return;
}
int mid = (st + en) >> 1;
if (idx <= mid) update(node << 1, st, mid, idx, val);
else update(node << 1 | 1, mid + 1, en, idx, val);
// Merging left and right portion
auto &Cur = t[node];
auto &Left = t[node << 1];
auto &Right = t[node << 1 | 1];
Cur = merge(Left, Right);
return;
}
auto query(int node, int st, int en, int l, int r) { //=> O(log n)
if (st > r || en < l) { // No overlapping and out of range
return vector<int> (32, 0); // <== careful
}
if (l <= st && en <= r) { // Complete overlapped (l-r in range)
return t[node];
}
// Partial overlapping
int mid = (st + en) >> 1;
auto Left = query(node << 1, st, mid, l, r);
auto Right = query(node << 1 | 1, mid + 1, en, l, r);
return merge(Left, Right);
}
} st1;
ll mod = 1e9 + 7;
ll Pow(ll a, ll b) { // O(log b)
a %= mod;
ll ans = 1;
while (b) {
if (b & 1) ans = (ans * a) % mod;
a = (a * a) % mod;
b >>= 1;
}
return ans;
}
void solve() {
ll n, q;
cin >> n >> q;
vector<ll> v(n + 1);
for (int i = 1; i <= n; i++) {
ll x; cin >> x;
v[i] = x;
}
st1.build(1, 1, n, v);
short type;
while(q--) {
cin >> type;
if(type == 1) {
int pos, x;
cin >> pos >> x;
st1.update(1, 1, n, pos, x);
}
else {
int l, r;
cin >> l >> r;
auto bitCnt = st1.query(1, 1, n, l, r);
// coutall(bitCnt);
ll sum = 0, sz = r - l + 1;
for(int b = 0; b < 32; b++) {
ll cnt0 = sz - bitCnt[b];
ll cnt1 = bitCnt[b];
if(cnt1 > 0) {
ll totCom = (Pow(2, cnt1 - 1) * Pow(2, cnt0)) % mod; // (nC1 + nC3 + ...+ nClastOdd = 2^(n - 1)) * (nC0 + nC1 + ...+nCn = 2^n)
sum += (totCom * Pow(2, b)) % mod;
sum %= mod;
}
}
cout << sum << endl;
}
}
return;
}
Information
- Submit By
- Type
- Submission
- Problem
- P1183 G. The Sorcerer’s Subsequence Sum
- Language
- C++17 (G++ 13.2.0)
- Submit At
- 2025-03-21 18:11:28
- Judged At
- 2025-03-21 18:11:28
- Judged By
- Score
- 0
- Total Time
- 0ms
- Peak Memory
- 0 Bytes