ulvis.paste.net

Paste Search Dynamic
Recent pastes
get
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <math.h>
  4. #include <iomanip>
  5. #include <vector>
  6. #include <map>
  7. #include <fstream>
  8. #include <queue>
  9. #include <set>
  10. #include <stack>
  11. #define endl "\n"
  12. #define ll long long
  13. #define ull unsigned long long
  14. #define vi vector<int>
  15. #define vvi vector<vi>
  16. #define pii pair<int, int>
  17. #define sort(x) sort(x.begin(), x.end())
  18. #define vpii vector<pii>
  19. #define vull vector<ull>
  20. #define vll vector<ll>
  21. #define vc vector<char>
  22. #define vs vector<string>
  23. #define vb vector<bool>
  24. #define ld long double
  25. #define PI 3.141592653589793116
  26.  
  27. using namespace std;
  28.  
  29. void fast_io(){
  30.     ios_base::sync_with_stdio(0);
  31.     cin.tie(null);
  32.     cout.tie(null);
  33.     freopen("sum.in", "r", stdin);freopen("sum.out", "w", stdout);
  34. }
  35.  
  36. const int MAX_N = 1e6;
  37.  
  38. vull t(4*MAX_N);
  39. vll cnt(4*MAX_N);
  40. bool was[4*MAX_N];
  41.  
  42. void push(ll v, ll l, ll r){
  43.     if(was[v]){
  44.         t[v] = cnt[v]*(r-l);
  45.         if(r!=l){
  46.             was[2*v]=was[2*v+1]=true;
  47.             cnt[2*v]=cnt[v];
  48.             cnt[2*v+1]=cnt[v];
  49.         }
  50.         was[v] = 0;
  51.         cnt[v] = 0;
  52.     }
  53. }
  54.  
  55. void mod(ll v, ll l, ll r){
  56.     ll mid = l+(r-l)/2;
  57.     push(v*2, l, mid);
  58.     push(v*2+1, mid, r);
  59.     t[v] = t[2*v]+t[2*v+1];
  60. }
  61.  
  62. void update(ll v, ll l, ll r, ll ql, ll qr, ll x){
  63.     if(r<=ql||l>=qr){
  64.         return;
  65.     }
  66.     if(ql<=l&&r<=qr){
  67.         was[v] = true;
  68.         cnt[v] = x;
  69.         return;
  70.     }
  71.     push(v, l, r);
  72.     ll mid = l+(r-l)/2;
  73.     update(v*2, l, mid, ql, qr, x);
  74.     update(v*2+1, mid, r, ql, qr, x);
  75.     mod(v, l, r);
  76. }
  77.  
  78. ll get(ll v, ll l, ll r, ll ql, ll qr){
  79.     push(v, l, r);
  80.     if(r<=ql||l>=qr){
  81.         return 0;
  82.     } else if(ql<=l&&r<=qr){
  83.         return t[v];
  84.     } else{
  85.         ll mid = l+(r-l)/2;
  86.         return get(v*2, l, mid, ql, qr)+get(v*2+1, mid, r, ql, qr);
  87.     }
  88. }
  89.  
  90. int main(){
  91.     fast_io();
  92.     int n, k;
  93.     cin >> n >> k;
  94.     char a;
  95.     int c, b, d;
  96.     for (int i=0; i<k; i++) {
  97.         cin >> a;
  98.         if(a=='A'){
  99.             cin >> c >> b >> d;
  100.             //cerr << 1;
  101.             update(1, 0, n, c-1, b, d);
  102.         } else{
  103.             cin >> c >> b;
  104.             //cerr << c << " " << b;
  105.             cout << get(1, 0, n, c-1, b) << endl;
  106.         }
  107.     }
  108.     return 0;
  109. }
Parsed in 0.016 seconds