#include #include #include #include #include #include #include #include #include #define vv(a, b, c, d) vector >(a, vector(b, c)) #define vvi std::vector > #define vvl std::vector > #define MODs 1000000007; typedef long long int ll; using namespace std; //------------------------------------------------------------------- ll M=1; vector seg, ad; void init(ll N){ while(M0){ k = (k-1)/2; seg[k] = seg[k*2+1] + seg[k*2+2]; } } void add(ll a, ll b, ll l, ll r, ll x, ll k){ if(r<=a||b<=l) return; if(a<=l&&r<=b) ad[k]+=x; else{ add(a, b, l, (l+r)/2, x, k*2+1); add(a, b, (l+r)/2, r, x, k*2+2); } } ll get_add(ll k){ k+=(M+1)/2-1; ll ret = ad[k]; while(k>0){ k = (k-1)/2; ret += ad[k]; } return ret; } ll query(ll a, ll b, ll l, ll r, ll k){ if(r<=a || b<=l) return 0; if(a<=l && r<=b) return seg[k]; ll A = query(a, b, l, (l+r)/2, k*2+1); ll B = query(a, b, (l+r)/2, r, k*2+2); return A + B; } //------------------------------------------------------------------- int main(int argc, char const *argv[]) { ll N, Q, a, b, c, d; std::cin >> N >> Q; init(N); std::vector A(N); for(int i=0;i> A[i]; for(int i=0;i> a; if(a == 2) { std::cin >> b >> c; if(b!=c){ std::cout << query(b-1, c-1, 0, (M+1)/2, 0) + 1<< '\n'; }else std::cout << 1 << '\n'; }else { std::cin >> b >> c >> d; add(b-1, c, 0, (M+1)/2, d, 0); if(b-1!=0&&get_add(b-2)+A[b-2]!=get_add(b-1)+A[b-1]) update(0, (M+1)/2, 1, b-2); else update(0, (M+1)/2, 0, b-2); if(c-1!=N-1&&get_add(c-1)+A[c-1]!=get_add(c)+A[c]) update(0, (M+1)/2, 1, c-1); else update(0, (M+1)/2, 0, c-1); } } return 0; }