Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define MAX 1000005
- #define MVAL 1000000005
- #define mid (i+j)/2
- #define F(i, n) for(int i = 1; i <= n; i++)
- using namespace std;
- int n, q, arr[MAX], a, b, v, curNode=1, vs[MAX];
- vector<int> le, ri, sum;
- int createnode(int soma) {
- cout << ri[1] << "\n";
- curNode++;
- le.push_back(-1);
- ri.push_back(-1);
- sum.push_back(soma);
- cout << curNode << " | " << ri[1] << "\n";
- return curNode;
- }
- int createnode(int idl, int idr) {
- curNode++;
- le.push_back(idl);
- ri.push_back(idr);
- sum.push_back(sum[idl] + sum[idr]);
- return curNode;
- }
- void emergency_son(int node) {
- while ((int)le.size() - 1 < node) le.push_back(-1);
- while ((int)ri.size() - 1 < node) ri.push_back(-1);
- cout << "ES " << node << " " << le[node] << " " << ri[node] << " | " << (ri[node] == -1) << "\n";
- cout << "The left was " << le[node] << "\n";
- if (le[node] == -1) {int var = createnode(0); le[node] = var;}
- cout << "The right is " << ri[node] << " and the node is " << node << " but at one it is " << ri[1] << "\n";
- if (ri[node] == -1) {cout << "hello?\n"; ri[node] = createnode(0);}
- cout << "EES " << node << "\n";
- }
- int update(int node, int i, int j, int ind, int v) {
- emergency_son(node);
- cout << node << " " << i << " " << j << " " << ind << " " << v << " |> ";
- cout << le[node] << " " << ri[node] << "\n";
- if (ind < i || ind > j) return createnode(0);
- else if (i == j) return createnode(1+sum[node]);
- else if (mid + 1 <= ind) return createnode(le[node], update(ri[node], mid+1, j, ind, v));
- else return createnode(update(le[node], i, mid, ind, v), ri[node]);
- }
- int query(int node, int i, int j, int ind) {
- emergency_son(node);
- if (i > ind) return 0;
- else if (j <= ind) return sum[node];
- else if (ind >= mid + 1) return sum[le[node]] + query(ri[node], mid+1, j, ind);
- else return query(le[node], i, mid, ind);
- }
- int main() {
- cin >> n >> q;
- le.push_back(-1); ri.push_back(-1); sum.push_back(-1);
- F(i, n) {
- cin >> arr[i];
- if (i > 1) vs[i] = update(vs[i-1], 1, MVAL, arr[i], 1);
- else vs[1] = update(1, 1, MVAL, arr[i], 1);
- cout << "resisti\n";
- }
- F(i, q) {
- cin >> a >> b >> v;
- cout << query(vs[b], 1, MVAL, v) - query(vs[a-1], 1, MVAL, v) << "\n";
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement