#include<stdio.h>
#include<stdlib.h>
long long int sums[524300];
long long int update[524300];
long int v;
long long int query(long int i,long int l,long int r,long int p,long int q)
{
// printf("here %d %d %d %d\n",p,q,l,r);
if(p>q)
return 0;
sums[i]+=update[i]*(r-l+1);
update[i*2]+=update[i];
update[i*2+1]+=update[i];
update[i]=0;
if(l==p && q==r)
return sums[i];
long int m = (l+r)/2;
long long int s;
if(q<=m)
return query(i*2,l,m,p,q);
if(m+1<=p)
return query(i*2+1,m+1,r,p,q);
s=query(i*2,l,m,p,m);
s+=query(i*2+1,m+1,r,m+1,q);
return s;
}
void add(long int i,long int l,long int r,long int p,long int q)
{
if(p>q)
return;
long int m=(l+r)/2;
sums[i]+=(q-p+1)*v;
if(l==p && r==q)
{ update[i*2]+=v;
update[i*2+1]+=v;
return;
}
if(q<=m)
{ add(i*2,l,m,p,q);
return;
}
if(m+1<=p)
{ add(i*2+1,m+1,r,p,q);
return;
}
add(i*2,l,m,p,m);
add(i*2+1,m+1,r,m+1,q);
return;
}
int main(void)
{
int t,b;
long int n,c,p,q;
while(t--)
{
memset(sums
,0,sizeof(long long int)*524300); memset(update
,0,sizeof(long long int)*524300); while(c--)
{ scanf("%d %ld %ld",&b
,&p
,&q
); if(b==1)
{ printf("%lld\n",query
(1,0,n
-1,p
-1,q
-1));} else
add(1,0,n-1,p-1,q-1);
}
}
}
//scanf("%d",&v);
return 0;
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RkbGliLmg+CmxvbmcgbG9uZyBpbnQgc3Vtc1s1MjQzMDBdOwpsb25nIGxvbmcgaW50IHVwZGF0ZVs1MjQzMDBdOwpsb25nIGludCB2Owpsb25nIGxvbmcgaW50IHF1ZXJ5KGxvbmcgaW50IGksbG9uZyBpbnQgbCxsb25nIGludCByLGxvbmcgaW50IHAsbG9uZyBpbnQgcSkKewogICAgLy8gcHJpbnRmKCJoZXJlICVkICVkICVkICVkXG4iLHAscSxsLHIpOwogICAgIGlmKHA+cSkKICAgICByZXR1cm4gMDsKICAgICAgc3Vtc1tpXSs9dXBkYXRlW2ldKihyLWwrMSk7CiAgICAgICB1cGRhdGVbaSoyXSs9dXBkYXRlW2ldOwogICAgICAgdXBkYXRlW2kqMisxXSs9dXBkYXRlW2ldOwogICAgICAgdXBkYXRlW2ldPTA7CiAgICAgICAKICAgICBpZihsPT1wICYmIHE9PXIpCiAgICAgIHJldHVybiBzdW1zW2ldOwogICAgIAogICAgIAogICAgIGxvbmcgaW50IG0gPSAobCtyKS8yOwogICAgIGxvbmcgbG9uZyBpbnQgczsKICAgICAKICAgICBpZihxPD1tKQogICAgIHJldHVybiBxdWVyeShpKjIsbCxtLHAscSk7CiAgICAgCiAgICAgaWYobSsxPD1wKQogICAgIHJldHVybiBxdWVyeShpKjIrMSxtKzEscixwLHEpOwogICAgIAogICAgIHM9cXVlcnkoaSoyLGwsbSxwLG0pOwogICAgIHMrPXF1ZXJ5KGkqMisxLG0rMSxyLG0rMSxxKTsKICAgICByZXR1cm4gczsKfQp2b2lkIGFkZChsb25nIGludCBpLGxvbmcgaW50IGwsbG9uZyBpbnQgcixsb25nIGludCBwLGxvbmcgaW50IHEpCnsKICAgIAogICAgIGlmKHA+cSkKICAgICByZXR1cm47CiAgICAgCiAgICAgbG9uZyBpbnQgbT0obCtyKS8yOwogICAgIAogICAgIHN1bXNbaV0rPShxLXArMSkqdjsKICAgICBpZihsPT1wICYmIHI9PXEpCiAgICAgeyB1cGRhdGVbaSoyXSs9djsKICAgICAgIHVwZGF0ZVtpKjIrMV0rPXY7CiAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAgIGlmKHE8PW0pCiAgICAgeyBhZGQoaSoyLGwsbSxwLHEpOwogICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZihtKzE8PXApCiAgICAgeyBhZGQoaSoyKzEsbSsxLHIscCxxKTsKICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgICBhZGQoaSoyLGwsbSxwLG0pOwogICAgICAgYWRkKGkqMisxLG0rMSxyLG0rMSxxKTsKICAgICAgIHJldHVybjsKfQppbnQgbWFpbih2b2lkKQp7CiAgICBpbnQgdCxiOwogICAgbG9uZyBpbnQgbixjLHAscTsKICAgIHNjYW5mKCIlZCIsJnQpOwogICAgd2hpbGUodC0tKQogICAgewogICAgICAgc2NhbmYoIiVsZCIsJm4pOwogICAgICAgc2NhbmYoIiVsZCIsJmMpOwogICAgICAgbWVtc2V0KHN1bXMsMCxzaXplb2YobG9uZyBsb25nIGludCkqNTI0MzAwKTsKICAgICAgIG1lbXNldCh1cGRhdGUsMCxzaXplb2YobG9uZyBsb25nIGludCkqNTI0MzAwKTsKICAgICAgIHdoaWxlKGMtLSkKICAgICAgIHsgIHNjYW5mKCIlZCAlbGQgJWxkIiwmYiwmcCwmcSk7CiAgICAgICAgICBpZihiPT0xKQogICAgICAgICAgeyBwcmludGYoIiVsbGRcbiIscXVlcnkoMSwwLG4tMSxwLTEscS0xKSk7fQogICAgICAgICAgZWxzZQogICAgICAgICAgeyBzY2FuZigiJWxkIiwmdik7CiAgICAgICAgICAgIGFkZCgxLDAsbi0xLHAtMSxxLTEpOwogICAgICAgICAgfQogICAgICAgfQogICAgfQogICAgLy9zY2FuZigiJWQiLCZ2KTsKICAgIHJldHVybiAwOwp9CgoKCg==