circuit.cpp:1:21: warning: extra tokens at end of #include directive
1 | #include "circuit.h"#include <cmath>#include <algorithm>#include <vector>#include <iostream>using namespace std;typedef long long ll;int NN, MM;const int N = 2e5 + 10, P = 1000002022;int p[N], d[N];int lazy[4 * N];int a[N];ll pref[N];pair <ll, ll> tree[4 * N];ll tree2[4 * N];ll binpow(ll a, ll n) { if (n == 0) return 1; if (n % 2 == 0) { ll u = binpow(a, n / 2); return (u * u) % P; } return (a * binpow(a, n - 1)) % P;}bool ch = true;void pushh(int v, int tl, int tr) { if (lazy[v]) { lazy[v] = 0; if (tl != tr) { lazy[2 * v] = (lazy[2 * v] + 1) % 2; lazy[2 * v + 1] = (lazy[2 * v + 1] + 1) % 2; swap(tree[2 * v].first, tree[2 * v].second); swap(tree[2 * v + 1].first, tree[2 * v + 1].second); } }}void build_tree(int v, int tl, int tr) { if (tl == tr) { if (a[tl] == 1) tree[v] = { 1, 0 }; else tree[v] = { 0, 1 }; } else { int tm = (tl + tr) / 2; build_tree(2 * v, tl, tm); build_tree(2 * v + 1, tm + 1, tr); ll a = tree[2 * v].first, b = tree[2 * v].second, c = tree[2 * v + 1].first, d = tree[2 * v + 1].second; tree[v].first = 2 * a * c + a * d + b * c; tree[v].second = 2 * b * d + a * d + b * c; tree[v].first %= P; tree[v].second %= P; }}void update(int v, int tl, int tr, int l, int r) { if (tl > r || tr < l) return; if (tl >= l && tr <= r) { lazy[v] = (lazy[v] + 1) % 2; swap(tree[v].first, tree[v].second); return; } pushh(v, tl, tr); int tm = (tl + tr) / 2; update(2 * v, tl, tm, l, r); update(2 * v + 1, tm + 1, tr, l, r); ll a = tree[2 * v].first, b = tree[2 * v].second, c = tree[2 * v + 1].first, d = tree[2 * v + 1].second; tree[v].first = 2 * a * c + a * d + b * c; tree[v].second = 2 * b * d + a * d + b * c; tree[v].first %= P; tree[v].second %= P;}void pushh2(int v, int tl, int tr) { if (lazy[v]) { lazy[v] = 0; if (tl != tr) { lazy[2 * v] = (lazy[2 * v] + 1) % 2; lazy[2 * v + 1] = (lazy[2 * v + 1] + 1) % 2; int tm = (tl + tr) / 2; ll u = pref[tm]; if (tl) u -= pref[tl - 1]; u %= P; tree2[2 * v] = (u + P - tree2[2 * v]) % P; u = pref[tr] - pref[tm]; u %= P; tree2[2 * v + 1] = (u + P - tree2[2 * v + 1]) % P; } }}void build_tree2(int v, int tl, int tr) { if (tl == tr) { if (a[tl]) { tree2[v] = pref[tl]; if (tl) tree2[v] -= pref[tl - 1]; } tree2[v] %= P; } else { int tm = (tl + tr) / 2; build_tree2(2 * v, tl, tm); build_tree2(2 * v + 1, tm + 1, tr); tree2[v] = tree2[2 * v] + tree2[2 * v + 1]; tree2[v] %= P; }}void update2(int v, int tl, int tr, int l, int r) { if (tl > r || tr < l) return; if (tl >= l && tr <= r) { lazy[v] = (lazy[v] + 1) % 2; ll u = pref[tr]; if (tl) u -= pref[tl - 1]; u %= P; tree2[v] = (u - tree2[v] + P) % P; return; } pushh2(v, tl, tr); int tm = (tl + tr) / 2; update2(2 * v, tl, tm, l, r); update2(2 * v + 1, tm + 1, tr, l, r); tree2[v] = tree2[2 * v] + tree2[2 * v + 1]; tree2[v] %= P;}void init(int N, int M, std::vector<int> P, std::vector<int> A) { NN = N, MM = M; for (int i = 0; i < N + M - 1; i++) { p[i] = P[i]; if (i == 0) d[0] = 0; if (i > 0 && p[i] != (i - 1) / 2) ch = false;if (i) d[i] = d[P[i]] + 1; } for (int i = 0; i < M; i++) { a[i] = A[i]; } if (M != N + 1) ch = false; int u = log2(M); if ((1 << u) != M) ch = false; if (ch) build_tree(1, 0, M - 1); else { for (int i = 0; i < M; i++) { pref[i] = binpow(2, N - d[i + N]); if (i) pref[i] += pref[i - 1]; } for (int i = 0; i < M; i++) {if(A[i]) update2(1,0,M-1,i,i) ; }}}int count_ways(int L, int R) { if (ch) { update(1, 0, MM - 1, L - NN, R - NN); return tree[1].first; } else { update2(1, 0, MM - 1, L - NN, R - NN); return tree2[1]; }}
| ^
/usr/bin/ld: /tmp/ccE4cMxt.o: in function `main':
stub.cpp:(.text.startup+0x128): undefined reference to `init(int, int, std::vector<int, std::allocator<int> >, std::vector<int, std::allocator<int> >)'
/usr/bin/ld: stub.cpp:(.text.startup+0x169): undefined reference to `count_ways(int, int)'
collect2: error: ld returned 1 exit status