//JUST THE HORRIBLE PART
#include<cstdio>
#include<iostream>
#include<string>
#define M 1000000
typedef long long LL;
using namespace std;
LL tree[4*M],lazy[4*M];
void buildtree(LL node,LL a,LL b)
{
if(a>b)return ;
if(a==b)//leaf nodes
{
tree[node]=0;return;
lazy[node]=0;
}
LL mid=(a+b)/2;
buildtree(2*node,a,mid);
buildtree(2*node+1,mid+1,b);
tree[node]=0;
lazy[node]=0;
return;
}
void up(LL node,LL a,LL b,LL i,LL j,LL val)
{
if(a>b||b<i||a>j){return ;}
if(a>=i&&b<=j)
{
// printf("mayank node %d a %d b %d i %d j %d %d %d\n",node,a,b,i,j,tree[node],lazy[node]);
tree[node]+=val*(b-a+1);
if(a!=b)
{
lazy[2*node]+=val;
lazy[2*node+1]+=val;
}
return ;
}
LL mid=(a+b)/2;
up(2*node,a,mid,i,j,val);
up(2*node+1,mid+1,b,i,j,val);
tree[node]+=val*(min(b,j)-max(a,i)+1);//the value that need to be changed
// printf("vikash node %d a %d b %d i %d j %d %d \n",node,a,b,i,j,tree[node]);
// printf("%d %d %d %d %d %d %d %d\n",node,a,b,i,j,min(b,j),max(a,i),tree[node]);
// printf("sonu %lld %lld %lld %lld\n",node,tree[node],tree[2*node],tree[2*node+1]);
return ;
}
LL query(LL node,LL a,LL b,LL i,LL j)
{
// printf("node %d a %d b %d i %d j %d\n",node,a,b,i,j);
// system("pause");
if(a>b||a>j||b<i)return 0;
if(lazy[node]!=0)
{
// printf("tree[node] %d node %d\n",node,lazy[node]);
tree[node]+=lazy[node]*(b-a+1);
if(a!=b)
{
lazy[2*node]+=lazy[node];
lazy[2*node+1]+=lazy[node];
}
lazy[node]=0;
}
if(a>=i&&b<=j)
{
//tree[node]=tree[node]+lazy[2*node]+lazy[2*node+1];
return tree[node];
}
LL mid=(a+b)/2;
LL p,q,res;
p=query(2*node,a,mid,i,j);
q=query(2*node+1,mid+1,b,i,j);
//printf("p %d q %d node %d\n",p,q,node);
res=p+q;
//printf("node %d p %d q %d res %d\n",node,p,q,res);
return res;
}
int main()
{
LL t;
while(t--)
{
LL n,q;
buildtree(1,1,n);
//memset(lazy,0,sizeof(lazy));
//for(int i=1;i<=20;i++)printf("%d %d\n",i,tree[i]);
// system("pause");
while(q--)
{
LL a,p,q,val;
if(a==0)
{
scanf("%lld%lld%lld",&p
,&q
,&val
); up(1,1,n,p,q,val);
}
else
{
LL z=query(1,1,n,p,q);
}
// for(int i=1;i<=20;i++)printf("%d %lld %lld\n",i,tree[i],lazy[i]);
//
}
}
return 0;
}
Ly9KVVNUIFRIRSBIT1JSSUJMRSBQQVJUCgojaW5jbHVkZTxjc3RkaW8+CiNpbmNsdWRlPGlvc3RyZWFtPgojaW5jbHVkZTxzdHJpbmc+CiNkZWZpbmUgTSAxMDAwMDAwCnR5cGVkZWYgbG9uZyBsb25nIExMOwp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKTEwgIHRyZWVbNCpNXSxsYXp5WzQqTV07Cgp2b2lkIGJ1aWxkdHJlZShMTCBub2RlLExMIGEsTEwgYikKewoJaWYoYT5iKXJldHVybiA7CglpZihhPT1iKS8vbGVhZiBub2RlcwoJewoJCXRyZWVbbm9kZV09MDtyZXR1cm47CgkJbGF6eVtub2RlXT0wOwoJfQoJTEwgbWlkPShhK2IpLzI7CglidWlsZHRyZWUoMipub2RlLGEsbWlkKTsKCWJ1aWxkdHJlZSgyKm5vZGUrMSxtaWQrMSxiKTsKCgl0cmVlW25vZGVdPTA7CglsYXp5W25vZGVdPTA7CglyZXR1cm47Cn0KCnZvaWQgdXAoTEwgbm9kZSxMTCBhLExMIGIsTEwgaSxMTCBqLExMIHZhbCkKewoKCWlmKGE+Ynx8YjxpfHxhPmope3JldHVybiA7fQoKCglpZihhPj1pJiZiPD1qKQoJewogICAgICAvLyBwcmludGYoIm1heWFuayBub2RlICVkICBhICAlZCAgYiAgICAlZCAgICBpICAgICVkICBqICAgJWQgICAlZCAgICAlZFxuIixub2RlLGEsYixpLGosdHJlZVtub2RlXSxsYXp5W25vZGVdKTsKCQl0cmVlW25vZGVdKz12YWwqKGItYSsxKTsKCQoKCQlpZihhIT1iKQoJCXsKCQkJbGF6eVsyKm5vZGVdKz12YWw7CgkJCWxhenlbMipub2RlKzFdKz12YWw7CgoJCX0KCQlyZXR1cm4gOwoJfQoKCUxMIG1pZD0oYStiKS8yOwoJdXAoMipub2RlLGEsbWlkLGksaix2YWwpOwoJdXAoMipub2RlKzEsbWlkKzEsYixpLGosdmFsKTsKCiAgICB0cmVlW25vZGVdKz12YWwqKG1pbihiLGopLW1heChhLGkpKzEpOy8vdGhlIHZhbHVlIHRoYXQgbmVlZCB0byBiZSBjaGFuZ2VkCiAgLy8gIHByaW50ZigidmlrYXNoIG5vZGUgJWQgIGEgICVkICBiICAgICVkICAgIGkgICAgJWQgIGogICAlZCAgICVkICBcbiIsbm9kZSxhLGIsaSxqLHRyZWVbbm9kZV0pOwogICAvLyAgcHJpbnRmKCIlZCAgJWQgICAlZCAgJWQgICVkICAgJWQgICVkICAgJWRcbiIsbm9kZSxhLGIsaSxqLG1pbihiLGopLG1heChhLGkpLHRyZWVbbm9kZV0pOwoKICAgLy8gIHByaW50Zigic29udSAgJWxsZCAgICVsbGQgICAgJWxsZCAgICAgJWxsZFxuIixub2RlLHRyZWVbbm9kZV0sdHJlZVsyKm5vZGVdLHRyZWVbMipub2RlKzFdKTsKCglyZXR1cm4gOwp9CgpMTCAgcXVlcnkoTEwgbm9kZSxMTCBhLExMIGIsTEwgIGksTEwgIGopCnsKLy8gICAgcHJpbnRmKCJub2RlICVkICBhICAlZCAgYiAgICAlZCAgICBpICAgICVkICBqICAgJWRcbiIsbm9kZSxhLGIsaSxqKTsKLy8Jc3lzdGVtKCJwYXVzZSIpOwoKCWlmKGE+Ynx8YT5qfHxiPGkpcmV0dXJuIDA7CglpZihsYXp5W25vZGVdIT0wKQoJewogICAgLy8gICAgcHJpbnRmKCJ0cmVlW25vZGVdICAgICAlZCAgIG5vZGUgICAgJWRcbiIsbm9kZSxsYXp5W25vZGVdKTsKCQl0cmVlW25vZGVdKz1sYXp5W25vZGVdKihiLWErMSk7CgkJaWYoYSE9YikKCQl7CgkJCWxhenlbMipub2RlXSs9bGF6eVtub2RlXTsKCQkJbGF6eVsyKm5vZGUrMV0rPWxhenlbbm9kZV07CgkJfQoJCWxhenlbbm9kZV09MDsKICAgfQogICBpZihhPj1pJiZiPD1qKQogICB7CgkJLy90cmVlW25vZGVdPXRyZWVbbm9kZV0rbGF6eVsyKm5vZGVdK2xhenlbMipub2RlKzFdOwoJCXJldHVybiB0cmVlW25vZGVdOwogICB9CgogICBMTCBtaWQ9KGErYikvMjsKICAgTEwgIHAscSxyZXM7CiAgIHA9cXVlcnkoMipub2RlLGEsbWlkLGksaik7CiAgIHE9cXVlcnkoMipub2RlKzEsbWlkKzEsYixpLGopOwogICAvL3ByaW50ZigicCAgICVkIHEgICAlZCAgbm9kZSAgJWRcbiIscCxxLG5vZGUpOwogICByZXM9cCtxOwogIC8vcHJpbnRmKCJub2RlICAgJWQgIHAgICVkICBxICAgJWQgICAgICByZXMgICVkXG4iLG5vZGUscCxxLHJlcyk7CiAgIHJldHVybiByZXM7Cn0KCgoKaW50IG1haW4oKQp7CglMTCAgdDsKCXNjYW5mKCIlbGxkIiwmdCk7Cgl3aGlsZSh0LS0pCgl7CgkgIExMCSBuLHE7CgkJc2NhbmYoIiVsbGQlbGxkIiwmbiwmcSk7CgkJYnVpbGR0cmVlKDEsMSxuKTsKCQkvL21lbXNldChsYXp5LDAsc2l6ZW9mKGxhenkpKTsKCQkvL2ZvcihpbnQgaT0xO2k8PTIwO2krKylwcmludGYoIiVkICAlZFxuIixpLHRyZWVbaV0pOwoJLy8Jc3lzdGVtKCJwYXVzZSIpOwoJCXdoaWxlKHEtLSkKCQl7CgoJCUxMICBhLHAscSx2YWw7CgkJc2NhbmYoIiVsbGQiLCZhKTsKCQlpZihhPT0wKQoJCXsKCQkJc2NhbmYoIiVsbGQlbGxkJWxsZCIsJnAsJnEsJnZhbCk7CgkJCXVwKDEsMSxuLHAscSx2YWwpOwoJCX0KCQllbHNlCgkJewoJCQlzY2FuZigiJWxsZCVsbGQiLCZwLCZxKTsKCQkJTEwgej1xdWVyeSgxLDEsbixwLHEpOwoJCQlwcmludGYoIiVsbGRcbiIseik7CgkJfQoJLy8JZm9yKGludCBpPTE7aTw9MjA7aSsrKXByaW50ZigiJWQgICVsbGQgICAgJWxsZFxuIixpLHRyZWVbaV0sbGF6eVtpXSk7CiAgIC8vCgkgICAgfQoJfQoJcmV0dXJuIDA7Cn0KCg==