#include using namespace std; #define ALL(a) (a).begin(),(a).end() #define ALLR(a) (a).rbegin(),(a).rend() #define spa << " " << #define lfs <= (ll)(m); i--) typedef long long ll; typedef long double ld; const ll MOD = 1e9+7; //const ll MOD = 998244353; const ll INF = 1e18; using P = pair; template void chmin(T &a,T b){if(a>b)a=b;} template void chmax(T &a,T b){if(a void ans(bool x,T1 y,T2 z){if(x)cout< void debug(vector>v,ll h,ll w){for(ll i=0;iv,ll h,ll w){for(ll i=0;i void debug(vectorv,ll n){cout< vector>vec(ll x, ll y, T w){ vector>v(x,vector(y,w));return v;} ll gcd(ll x,ll y){ll r;while(y!=0&&(r=x%y)!=0){x=y;y=r;}return y==0?x:y;} template void emp(map&m, T x){m.emplace(x,0).first->second++;} template struct LazySegmentTree{ using F = function; vector data, lazy; ll n,lastlen = 1; F func = [](T a, T b){return a v){ n = (ll)v.size(); while(lastlen < n)lastlen *= 2; data.assign(lastlen*2-1,iden); lazy.assign(lastlen*2-1,iden_l); for(ll i=0;i=0;i--){ data[i] = func(data[2*i+1], data[2*i+2]); } } void eval(ll k, ll left, ll right){ if(lazy[k] != iden_l){ data[k] = f_lazy(data[k], f_trans(lazy[k],right-left)); if(k <= lastlen - 2){ lazy[2*k+1] = f_lazy(lazy[2*k+1],lazy[k]); lazy[2*k+2] = f_lazy(lazy[2*k+2],lazy[k]); } lazy[k] = iden_l; } } void update(ll a,ll b,T x,ll point=0LL, ll left=0LL,ll right=-1LL){ if(right<0)right=lastlen; eval(point,left,right); if(b <= left || right <= a); else if(a <= left && right <= b ){ lazy[point] = x; eval(point,left,right); } else{ update(a,b,x,point*2+1, left, (left+right)/2); update(a,b,x,point*2+2, (left+right)/2, right); data[point] = func(data[2*point+1], data[2*point+2]); } } T query(ll a,ll b,ll point=0LL,ll left=0LL,ll right=-1LL){ if(right<0)right=lastlen; T ret = iden; eval(point,left,right); if(b <= left || right <= a); else if(a <= left && right <= b ){ ret = func(ret,data[point]); } else{ T p=query(a,b,point*2+1, left, (left+right)/2); T q=query(a,b,point*2+2, (left+right)/2, right); data[point] = func(data[2*point+1], data[2*point+2]); ret = func(ret,p); ret = func(ret,q); } return ret; } void print(){ ll num=0; for(ll i=lastlen;i>0;i/=2)num++; ll tmp=1; for(ll i=0;i struct BIT{ ll n; ll k=1; vectordata; BIT(ll size):n(size){ data.assign(n,0); while(k*2<=n)k*=2; } void add(ll a,T w){ for(ll i=a+1;i<=n;i+=i&-i)data[i-1]+=w; } T sum(ll a){ T ret = 0; for(ll i=a+1;i>0;i-=i&-i)ret+=data[i-1]; return ret; } T sum(ll a,ll b){return a==0?sum(b):sum(b)-sum(a-1);} ll lower_bound(ll x){ ll ret=0; for(ll i=k;i>0;i/=2){ if(ret+i<=n&&data[ret+i-1]>n>>q; vectora(n); rep(i,0,n)cin>>a[i]; LazySegmentTreesegtree(a); BITbit(n-1); rep(i,0,n-1){ if(a[i]!=a[i+1])bit.add(i,1); } rep(i,0,q){ //cout<>p>>l>>r; if(p==1){ ll x;cin>>x; segtree.update(l-1,r,x); if(l!=1){ if(bit.sum(l-2,l-2)==1&& segtree.query(l-2,l-1)==segtree.query(l-1,l)){ bit.add(l-2,-1); } if(bit.sum(l-2,l-2)==0&& segtree.query(l-2,l-1)!=segtree.query(l-1,l)){ bit.add(l-2,1); } } if(r!=n){ if(bit.sum(r-1,r-1)==1&& segtree.query(r-1,r)==segtree.query(r,r+1)){ bit.add(r-1,-1); } if(bit.sum(r-1,r-1)==0&& segtree.query(r-1,r)!=segtree.query(r,r+1)){ bit.add(r-1,1); } } } else{ if(l==r)cout<<1<