#include<bits/stdc++.h>
using namespace std;
const long long MaxN = 1e5 + 5;
long long n,q;
struct Segment_tree
{
vector<long long> st,lazy_x,lazy_y;
void init(long long n)
{
if(n==0)
{
return;
}
st.assign(4*n+1,0);
lazy_x.assign(4*n+1,0);
lazy_y.assign(4*n+1,0);
}
long long cnt(long long l, long long r)
{
return r-l+1;
}
long long sum(long long l, long long r)
{
return (l+r)*cnt(l,r)/2;
}
void push_down(long long id, long long l, long long r)
{
if(l==r) return;
long long mid = (l+r)>>1;
long long x = lazy_x[id];
long long y = lazy_y[id];
lazy_x[2*id] += x;
lazy_y[2*id] += y;
lazy_x[2*id+1] += x;
lazy_y[2*id+1] += y;
st[2*id] += x*cnt(l,mid)+y*sum(l,mid);
st[2*id+1] += x*cnt(mid+1,r)+y*sum(mid+1,r);
lazy_x[id]=0;
lazy_y[id]=0;
}
void update(long long id, long long l, long long r, long long u, long long v, long long x, long long y)
{
if(l>v||r<u) return;
if(u<=l&&r<=v)
{
long long val=x-u*y;
st[id] += val*cnt(l,r)+y*sum(l,r);
lazy_x[id] += val;
lazy_y[id] += y;
return;
}
push_down(id,l,r);
long long mid = (l+r)>>1;
update(2*id,l,mid,u,v,x,y);
update(2*id+1,mid+1,r,u,v,x,y);
st[id]=st[2*id]+st[2*id+1];
}
long long get(long long id, long long l, long long r, long long u, long long v)
{
if(l>v||r<u) return 0;
if(u<=l&&r<=v)
{
return st[id];
}
push_down(id,l,r);
long long mid = (l+r)>>1;
return get(2*id,l,mid,u,v)+get(2*id+1,mid+1,r,u,v);
}
void update(long long u, long long v, long long x, long long y)
{
update(1,1,n,u,v,x,y);
}
long long get(long long u, long long v)
{
return get(1,1,n,u,v);
}
};
Segment_tree segtree;
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> n >> q;
segtree.init(n);
for(long long i=1; i<=q; i++)
{
long long num,l,r;
cin >> num >> l >> r;
if(num==1)
{
long long x,y;
cin >> x >> y;
segtree.update(l,r,x,y);
}
else
{
cout << segtree.get(l,r) << "\n";
}
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKY29uc3QgbG9uZyBsb25nIE1heE4gPSAxZTUgKyA1Owpsb25nIGxvbmcgbixxOwpzdHJ1Y3QgU2VnbWVudF90cmVlCnsKICAgIHZlY3Rvcjxsb25nIGxvbmc+IHN0LGxhenlfeCxsYXp5X3k7CiAgICB2b2lkIGluaXQobG9uZyBsb25nIG4pCiAgICB7CiAgICAgICAgaWYobj09MCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgc3QuYXNzaWduKDQqbisxLDApOwogICAgICAgIGxhenlfeC5hc3NpZ24oNCpuKzEsMCk7CiAgICAgICAgbGF6eV95LmFzc2lnbig0Km4rMSwwKTsKICAgIH0KICAgIGxvbmcgbG9uZyBjbnQobG9uZyBsb25nIGwsIGxvbmcgbG9uZyByKQogICAgewogICAgICAgIHJldHVybiByLWwrMTsKICAgIH0KICAgIGxvbmcgbG9uZyBzdW0obG9uZyBsb25nIGwsIGxvbmcgbG9uZyByKQogICAgewogICAgICAgIHJldHVybiAobCtyKSpjbnQobCxyKS8yOwogICAgfQogICAgdm9pZCBwdXNoX2Rvd24obG9uZyBsb25nIGlkLCBsb25nIGxvbmcgbCwgbG9uZyBsb25nIHIpCiAgICB7CiAgICAgICAgaWYobD09cikgcmV0dXJuOwoKICAgICAgICBsb25nIGxvbmcgbWlkID0gKGwrcik+PjE7CiAgICAgICAgbG9uZyBsb25nIHggPSBsYXp5X3hbaWRdOwogICAgICAgIGxvbmcgbG9uZyB5ID0gbGF6eV95W2lkXTsKCiAgICAgICAgbGF6eV94WzIqaWRdICs9IHg7CiAgICAgICAgbGF6eV95WzIqaWRdICs9IHk7CgogICAgICAgIGxhenlfeFsyKmlkKzFdICs9IHg7CiAgICAgICAgbGF6eV95WzIqaWQrMV0gKz0geTsKCiAgICAgICAgc3RbMippZF0gKz0geCpjbnQobCxtaWQpK3kqc3VtKGwsbWlkKTsKICAgICAgICBzdFsyKmlkKzFdICs9IHgqY250KG1pZCsxLHIpK3kqc3VtKG1pZCsxLHIpOwoKICAgICAgICBsYXp5X3hbaWRdPTA7CiAgICAgICAgbGF6eV95W2lkXT0wOwogICAgfQogICAgdm9pZCB1cGRhdGUobG9uZyBsb25nIGlkLCBsb25nIGxvbmcgbCwgbG9uZyBsb25nIHIsIGxvbmcgbG9uZyB1LCBsb25nIGxvbmcgdiwgbG9uZyBsb25nIHgsIGxvbmcgbG9uZyB5KQogICAgewogICAgICAgIGlmKGw+dnx8cjx1KSByZXR1cm47CiAgICAgICAgaWYodTw9bCYmcjw9dikKICAgICAgICB7CiAgICAgICAgICAgIGxvbmcgbG9uZyB2YWw9eC11Knk7CgogICAgICAgICAgICBzdFtpZF0gKz0gdmFsKmNudChsLHIpK3kqc3VtKGwscik7CgogICAgICAgICAgICBsYXp5X3hbaWRdICs9IHZhbDsKICAgICAgICAgICAgbGF6eV95W2lkXSArPSB5OwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBwdXNoX2Rvd24oaWQsbCxyKTsKICAgICAgICBsb25nIGxvbmcgbWlkID0gKGwrcik+PjE7CiAgICAgICAgdXBkYXRlKDIqaWQsbCxtaWQsdSx2LHgseSk7CiAgICAgICAgdXBkYXRlKDIqaWQrMSxtaWQrMSxyLHUsdix4LHkpOwogICAgICAgIHN0W2lkXT1zdFsyKmlkXStzdFsyKmlkKzFdOwogICAgfQogICAgbG9uZyBsb25nIGdldChsb25nIGxvbmcgaWQsIGxvbmcgbG9uZyBsLCBsb25nIGxvbmcgciwgbG9uZyBsb25nIHUsIGxvbmcgbG9uZyB2KQogICAgewogICAgICAgIGlmKGw+dnx8cjx1KSByZXR1cm4gMDsKICAgICAgICBpZih1PD1sJiZyPD12KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIHN0W2lkXTsKICAgICAgICB9CiAgICAgICAgcHVzaF9kb3duKGlkLGwscik7CiAgICAgICAgbG9uZyBsb25nIG1pZCA9IChsK3IpPj4xOwogICAgICAgIHJldHVybiBnZXQoMippZCxsLG1pZCx1LHYpK2dldCgyKmlkKzEsbWlkKzEscix1LHYpOwogICAgfQogICAgdm9pZCB1cGRhdGUobG9uZyBsb25nIHUsIGxvbmcgbG9uZyB2LCBsb25nIGxvbmcgeCwgbG9uZyBsb25nIHkpCiAgICB7CiAgICAgICAgdXBkYXRlKDEsMSxuLHUsdix4LHkpOwogICAgfQogICAgbG9uZyBsb25nIGdldChsb25nIGxvbmcgdSwgbG9uZyBsb25nIHYpCiAgICB7CiAgICAgICAgcmV0dXJuIGdldCgxLDEsbix1LHYpOwogICAgfQp9OwpTZWdtZW50X3RyZWUgc2VndHJlZTsKaW50IG1haW4oKQp7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwogICAgY2luLnRpZSgwKTsKCiAgICBjaW4gPj4gbiA+PiBxOwogICAgc2VndHJlZS5pbml0KG4pOwoKICAgIGZvcihsb25nIGxvbmcgaT0xOyBpPD1xOyBpKyspCiAgICB7CiAgICAgICAgbG9uZyBsb25nIG51bSxsLHI7CiAgICAgICAgY2luID4+IG51bSA+PiBsID4+IHI7CiAgICAgICAgaWYobnVtPT0xKQogICAgICAgIHsKICAgICAgICAgICAgbG9uZyBsb25nIHgseTsKICAgICAgICAgICAgY2luID4+IHggPj4geTsKICAgICAgICAgICAgc2VndHJlZS51cGRhdGUobCxyLHgseSk7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIGNvdXQgPDwgc2VndHJlZS5nZXQobCxyKSA8PCAiXG4iOwogICAgICAgIH0KICAgIH0KfQ==