surajumang08

GGSPAGtester

Jan 24th, 2017
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.79 KB | None | 0 0
  1. #include <iostream>
  2. #define ll long int
  3. using namespace std;
  4. ll a[100002], tree[400004];
  5. bool isComposite[100002];  //will be initialized to false
  6. void build(ll node, ll start, ll end) {
  7.     if(start == end) {
  8.         if(!isComposite[a[start]])
  9.             tree[node] = 1;
  10.         else
  11.             tree[node] = 0;
  12.     } else {
  13.         ll mid = (start + end) / 2;
  14.         build(2*node, start, mid);
  15.         build(2*node+1, mid+1, end);
  16.         tree[node] = tree[2*node] + tree[2*node+1];
  17.     }
  18. }
  19. void update(ll node, ll start, ll end, ll idx, ll val) {
  20.     if(start == end) {
  21.         a[idx] = val;
  22.         tree[node] = (isComposite[val])?0:1;
  23.     } else {
  24.         ll mid = (start + end) / 2;
  25.         if(idx <= mid) {
  26.             update(2*node, start, mid, idx, val);
  27.         } else {
  28.             update(2*node+1, mid+1, end, idx, val);
  29.         }
  30.         tree[node] = tree[2*node] + tree[2*node+1];
  31.     }
  32. }
  33. ll query(ll node, ll start, ll end, ll l, ll r) {
  34.     if(r < start || l > end) {
  35.         return 0;
  36.     }
  37.     if(l <= start && r >= end) {
  38.         return tree[node];
  39.     }
  40.     ll mid = (start + end) / 2;
  41.     return query(2*node, start, mid, l, r) + query(2*node+1, mid+1, end, l, r);
  42. }
  43. int main() {
  44.  
  45.     //seive's
  46.     isComposite[1] = true;
  47.     for(ll i = 2; i < 100001; i++) {
  48.         if(!isComposite[i]){     //if isPrime
  49.             for(ll j = 2*i; j < 100001; j += i) {
  50.                 isComposite[j] = true;
  51.             }
  52.         }
  53.     }
  54.  
  55.     ll n, q;
  56.     cin>>n>>q;
  57.     for(ll i = 1; i <= n; i++) {
  58.         cin>>a[i];
  59.     }
  60.     build(1, 1, n);
  61.     ll c, l, r;
  62.     while (q--) {
  63.         cin>>c>>l>>r;
  64.         if(c == 1) {
  65.             cout<<query(1, 1, n, l, r)<<"\n";
  66.         } else {
  67.             update(1, 1, n, l, r);
  68.         }
  69.     }
  70.     return 0;
  71. }
Add Comment
Please, Sign In to add comment