Advertisement
Guest User

K

a guest
Apr 19th, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.29 KB | None | 0 0
  1. # include <bits/stdc++.h>
  2.  
  3. # define ll long long  
  4. # define fr first
  5. # define se second
  6.  
  7. using namespace std;
  8.  
  9. long long answ;
  10. long long  mx, mn;
  11.  
  12. pair<long long, pair<ll, ll> > t[4000000];
  13. long long  p[4000010], a[4000010];
  14.  
  15. void build(ll tv, ll tl, ll tr){
  16.     if(tl == tr){
  17.         t[tv].fr = a[tl] * a[tl];
  18.         t[tv].se.fr = a[tl];
  19.         t[tv].se.se = a[tl];
  20.         return ;
  21.     }
  22.     ll tm = (tl + tr) / 2;
  23.     build(tv * 2, tl, tm);
  24.     build(tv * 2 + 1, tm + 1, tr);
  25.     t[tv].fr = t[tv * 2].fr + t[tv * 2 + 1].fr;
  26.     t[tv].se.fr = min(t[tv * 2].se.fr , t[tv * 2 + 1].se.fr);
  27.     t[tv].se.se = max(t[tv * 2].se.se , t[tv * 2 + 1].se.se);
  28. }
  29.  
  30. void iz(ll tv, ll tl, ll tr, ll l, ll r, long long x){
  31.     if(l > r) return ;
  32.     if(tl == l && tr == r){
  33.         t[tv].fr = x * x;
  34.         t[tv].se.fr = x;
  35.         t[tv].se.se = x;
  36.         return ;
  37.     }
  38.  
  39.     ll tm = (tl + tr) / 2;
  40.     iz(tv * 2, tl, tm, l, min(r, tm) , x);
  41.     iz(tv * 2 + 1, tm + 1, tr, max(l, tm + 1) , r , x);
  42.     t[tv].fr = t[tv * 2].fr + t[tv * 2 + 1].fr;
  43.     t[tv].se.fr = min(t[tv * 2].se.fr , t[tv * 2 + 1].se.fr);
  44.     t[tv].se.se = max(t[tv * 2].se.se , t[tv * 2 + 1].se.se);
  45. }
  46.  
  47. void ans(ll tv, ll tl, ll tr, ll l, ll r){
  48.     if(l > r) return ;
  49.     if(tl == l && tr == r){
  50.         answ += t[tv].fr;
  51.         mn = min(mn, t[tv].se.fr);
  52.         mx = max(mx, t[tv].se.se);
  53.         return ;
  54.     }
  55.  
  56.     ll tm = (tl + tr) / 2;
  57.     ans(tv * 2, tl, tm, l, min(tm, r));
  58.     ans(tv * 2 + 1, tm + 1, tr , max(tm + 1, l) , r);
  59. }
  60.  
  61. int main()
  62. {
  63.     ios_base::sync_with_stdio(0);
  64.     freopen("permutation.in", "r", stdin);
  65.     freopen("permutation.out", "w", stdout);
  66.     ll n, i, l, r, t, m;
  67.     cin>> n;
  68.     for(i = 1; i <= n; i++){
  69.         cin>> a[i];
  70.     }
  71.     build(1, 1, n);
  72.  
  73.     for(i = 1; i <= n; i++){
  74.         p[i] = p[i - 1] + i * i;
  75.     }
  76.  
  77.  
  78.     cin>> m;
  79.     for(i = 1; i <= m; i ++){
  80.         cin>> t>> l>> r;
  81.         if(t == 1){
  82.             iz(1, 1, n, l, l, r);
  83.         } else{
  84.             answ = 0;
  85.             mn = n + 10;
  86.             mx = 0;
  87.             ans(1, 1, n, l, r);
  88.             if(mx <= (r - l + 1) && answ == p[r - l + 1] && mn == 1){
  89.                 cout<<"YES\n";
  90.             }else{
  91.                 cout<<"NO\n";
  92.             }
  93.         }
  94.     }
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement