Submission #348564

#TimeUsernameProblemLanguageResultExecution timeMemory
348564nicolaalexandraMonkey and Apple-trees (IZhO12_apple)C++14
100 / 100
857 ms232796 KiB
#include <bits/stdc++.h> using namespace std; struct segment_tree{ int sum,lazy; segment_tree *left, *right; segment_tree (){ left = right = NULL; sum = lazy = 0; } }; segment_tree *rad; int q,tip,x,y,sol,n,c; void update_lazy (segment_tree *nod, int st, int dr){ if (nod == NULL || !nod->lazy) return; if (st != dr){ if (nod->left == NULL) nod->left = new segment_tree(); if (nod->right == NULL) nod->right = new segment_tree(); int mid = (st+dr)>>1; nod->left->sum = mid-st+1; nod->left->lazy = 1; nod->right->sum = dr-mid; nod->right->lazy = 1; } nod->lazy = 0; } void update (segment_tree *nod, int st, int dr, int x, int y){ update_lazy (nod,st,dr); if (x <= st && dr <= y){ nod->sum = dr - st + 1; nod->lazy = 1; update_lazy (nod,st,dr); return; } int mid = (st+dr)>>1; if (x <= mid){ if (nod->left == NULL) nod->left = new segment_tree(); update (nod->left,st,mid,x,y); } if (y > mid){ if (nod->right == NULL) nod->right = new segment_tree(); update (nod->right,mid+1,dr,x,y); } nod->sum = 0; if (nod->left != NULL){ update_lazy (nod->left,st,mid); nod->sum += nod->left->sum; } if (nod->right != NULL){ update_lazy (nod->right,mid+1,dr); nod->sum += nod->right->sum; } //nod->sum = nod->left->sum + nod->right->sum; } void query (segment_tree *nod, int st, int dr, int x, int y){ update_lazy (nod,st,dr); if (x <= st && dr <= y){ sol += nod->sum; return; } int mid = (st+dr)>>1; if (x <= mid){ //if (nod->left == NULL) // nod->left = new segment_tree(); if (nod->left != NULL) query (nod->left,st,mid,x,y); } if (y > mid){ //if (nod->right == NULL) // nod->right = new segment_tree(); if (nod->right != NULL) query (nod->right,mid+1,dr,x,y); } } int main (){ //ifstream cin ("date.in"); //ofstream cout ("date.out"); rad = new segment_tree(); n = 1000000000; cin>>q; c = 0; for (;q--;){ cin>>tip>>x>>y; x += c, y += c; if (tip == 1){ sol = 0; query (rad,1,n,x,y); cout<<sol<<"\n"; c = sol; } else update (rad,1,n,x,y); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...