#include<stdio.h>
long long lazy[500000],segmentTree[500000];
long long query(int b,int e,int index,int i,int j)
{
long long p1,p2;
if(e < i || b > j )
return 0;
if(lazy[index] != 0){
if(b==e)
segmentTree[index] += lazy[index];
else{
segmentTree[index] += lazy[index] * (e-b+1);
lazy[index * 2 + 1] += lazy[index];
lazy[index * 2 + 2] += lazy[index];
}
lazy[index] = 0;
}
if(b >= i && e <= j)
return segmentTree[index];
int mid = (b+e)/2;
p1 = query(b,mid,2*index+1,i,j);
p2 = query(mid+1,e,2*index + 2,i,j);
segmentTree[index] = p1+p2;
return segmentTree[index];
}
void update(int b,int e,int index,long long val,int i,int j)
{
int mid;
if(b > j || e < i){
// printf("HIIII %d %d %d %d",b,e,i,j);
return;
}
if(lazy[index] != 0){
if(b==e)
segmentTree[index] += lazy[index];
else{
segmentTree[index] += lazy[index] * (e-b+1);
lazy[index * 2 + 1] += lazy[index];
lazy[index * 2 + 2] += lazy[index];
}
lazy[index] = 0;
}
if(b >= i && e <= j){
if(b==e)
segmentTree[index] += val;
else{
segmentTree[index] += val * (e-b+1);
lazy[index * 2 + 1] += val;
lazy[index * 2 + 2] += val;
}
return ;
}
mid = (b+e)/2;
update(b,mid,2*index+1,val,i,j);
update(mid+1,e,2*index + 2,val,i,j);
segmentTree[index] = query(b, mid, index * 2 + 1, b, mid) + query(mid + 1, e, index * 2 + 2, mid + 1, e);//segmentTree[index*2+1] + segmentTree[index*2+2];
//segmentTree[index] = segmentTree[index*2+1] + segmentTree[index*2+2];
}
int main()
{
int t,n,c,i,a,d,j,k;
long long value;
while(t--){
for(k = 0 ; k < 500000 ; k++){
segmentTree[k] = 0;
lazy[k] = 0;
}
while(c--){
if(a==0){
scanf("%d %d %lld",&i
,&j
,&value
); i = i-1;
j = j - 1;
update(0,n-1,0,value,i,j);//sum is just assigned no use of it.
}
else{
i = i-1;
j = j - 1;
printf("%lld\n",query
(0,n
-1,0,i
,j
)); }
}
}
return 0;
}
I2luY2x1ZGU8c3RkaW8uaD4KCmxvbmcgbG9uZyBsYXp5WzUwMDAwMF0sc2VnbWVudFRyZWVbNTAwMDAwXTsKCgpsb25nIGxvbmcgcXVlcnkoaW50IGIsaW50IGUsaW50IGluZGV4LGludCBpLGludCBqKQp7CiAgICBsb25nIGxvbmcgcDEscDI7CiAgICBpZihlIDwgaSB8fCBiID4gaiApCiAgICAgICAgcmV0dXJuIDA7CiAgICBpZihsYXp5W2luZGV4XSAhPSAwKXsKCiAgICAgICAgaWYoYj09ZSkKICAgICAgICAgICAgc2VnbWVudFRyZWVbaW5kZXhdICs9IGxhenlbaW5kZXhdOwogICAgICAgIGVsc2V7CiAgICAgICAgICAgIHNlZ21lbnRUcmVlW2luZGV4XSArPSBsYXp5W2luZGV4XSAqIChlLWIrMSk7CiAgICAgICAgICAgIGxhenlbaW5kZXggKiAyICsgMV0gKz0gbGF6eVtpbmRleF07CiAgICAgICAgICAgIGxhenlbaW5kZXggKiAyICsgMl0gKz0gbGF6eVtpbmRleF07CiAgICAgICAgfQogICAgICAgIGxhenlbaW5kZXhdID0gMDsKICAgIH0KCiAgICAgICAgaWYoYiA+PSBpICYmIGUgPD0gaikKICAgICAgICAgICAgcmV0dXJuIHNlZ21lbnRUcmVlW2luZGV4XTsKICAgICAgICBpbnQgbWlkID0gKGIrZSkvMjsKICAgICAgICAgcDEgID0gcXVlcnkoYixtaWQsMippbmRleCsxLGksaik7CiAgICAgICAgIHAyID0gcXVlcnkobWlkKzEsZSwyKmluZGV4ICsgMixpLGopOwogICAgICAgIHNlZ21lbnRUcmVlW2luZGV4XSA9IHAxK3AyOwogICAgICAgIHJldHVybiBzZWdtZW50VHJlZVtpbmRleF07Cn0KCnZvaWQgdXBkYXRlKGludCBiLGludCBlLGludCBpbmRleCxsb25nIGxvbmcgdmFsLGludCBpLGludCBqKQp7CiAgICBpbnQgbWlkOwoKICAgIGlmKGIgPiBqIHx8IGUgPCBpKXsKICAgICAgLy8gIHByaW50ZigiSElJSUkgJWQgJWQgJWQgJWQiLGIsZSxpLGopOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZihsYXp5W2luZGV4XSAhPSAwKXsKCiAgICAgICAgaWYoYj09ZSkKICAgICAgICAgICAgc2VnbWVudFRyZWVbaW5kZXhdICs9IGxhenlbaW5kZXhdOwogICAgICAgIGVsc2V7CiAgICAgICAgICAgIHNlZ21lbnRUcmVlW2luZGV4XSArPSBsYXp5W2luZGV4XSAqIChlLWIrMSk7CiAgICAgICAgICAgIGxhenlbaW5kZXggKiAyICsgMV0gKz0gbGF6eVtpbmRleF07CiAgICAgICAgICAgIGxhenlbaW5kZXggKiAyICsgMl0gKz0gbGF6eVtpbmRleF07CiAgICAgICAgfQogICAgICAgIGxhenlbaW5kZXhdID0gMDsKICAgIH0KCiAgICAgICAgaWYoYiA+PSBpICYmIGUgPD0gail7CiAgICAgICAgICAgIGlmKGI9PWUpCiAgICAgICAgICAgICAgICBzZWdtZW50VHJlZVtpbmRleF0gKz0gdmFsOwogICAgICAgICAgICBlbHNlewogICAgICAgICAgICAgICAgc2VnbWVudFRyZWVbaW5kZXhdICs9IHZhbCAqIChlLWIrMSk7CiAgICAgICAgICAgICAgICBsYXp5W2luZGV4ICogMiArIDFdICs9IHZhbDsKICAgICAgICAgICAgICAgIGxhenlbaW5kZXggKiAyICsgMl0gKz0gdmFsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiA7CiAgICAgICAgfQogICAgICAgIG1pZCA9IChiK2UpLzI7CiAgICAgICAgIHVwZGF0ZShiLG1pZCwyKmluZGV4KzEsdmFsLGksaik7CiAgICAgICAgIHVwZGF0ZShtaWQrMSxlLDIqaW5kZXggKyAyLHZhbCxpLGopOwogICAgICAgIHNlZ21lbnRUcmVlW2luZGV4XSA9IHF1ZXJ5KGIsIG1pZCwgaW5kZXggKiAyICsgMSwgYiwgbWlkKSArIHF1ZXJ5KG1pZCArIDEsIGUsIGluZGV4ICogMiArIDIsIG1pZCArIDEsIGUpOy8vc2VnbWVudFRyZWVbaW5kZXgqMisxXSArIHNlZ21lbnRUcmVlW2luZGV4KjIrMl07CiAgICAgICAgLy9zZWdtZW50VHJlZVtpbmRleF0gPSBzZWdtZW50VHJlZVtpbmRleCoyKzFdICsgc2VnbWVudFRyZWVbaW5kZXgqMisyXTsKfQoKCgppbnQgbWFpbigpCnsKICAgIGludCB0LG4sYyxpLGEsZCxqLGs7CiAgICBsb25nIGxvbmcgdmFsdWU7CiAgICBzY2FuZigiJWQiLCZ0KTsKICAgIHdoaWxlKHQtLSl7CiAgICAgICAgc2NhbmYoIiVkICVkIiwgJm4sICZjKTsKICAgICAgICBmb3IoayA9IDAgOyBrIDwgNTAwMDAwIDsgaysrKXsKICAgICAgICAgICAgc2VnbWVudFRyZWVba10gPSAwOwogICAgICAgICAgICBsYXp5W2tdID0gMDsKICAgICAgICB9CiAgICAgICAgd2hpbGUoYy0tKXsKICAgICAgICAgICAgc2NhbmYoIiVkIiwmYSk7CiAgICAgICAgICAgIGlmKGE9PTApewogICAgICAgICAgICAgICAgc2NhbmYoIiVkICVkICVsbGQiLCZpLCZqLCZ2YWx1ZSk7CiAgICAgICAgICAgICAgICBpID0gaS0xOwogICAgICAgICAgICAgICAgaiA9IGogLSAxOwogICAgICAgICAgICAgICAgdXBkYXRlKDAsbi0xLDAsdmFsdWUsaSxqKTsvL3N1bSBpcyBqdXN0IGFzc2lnbmVkIG5vIHVzZSBvZiBpdC4KCiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZXsKICAgICAgICAgICAgICAgIHNjYW5mKCIlZCAlZCIsJmksJmopOwogICAgICAgICAgICAgICAgaSA9IGktMTsKICAgICAgICAgICAgICAgIGogPSBqIC0gMTsKICAgICAgICAgICAgICAgIHByaW50ZigiJWxsZFxuIixxdWVyeSgwLG4tMSwwLGksaikpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIDA7Cn0KCgo=