#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
long long int segtree[ 1000000 ] ; // no need of extra space i reduced it
long long int lazy[ 1000000 ] ;
void updatetree( int low,int high,long long int value,int qlow,int qhigh,int pos) ; // value should be long long
long long int addtree( int low,int high,int qlow,int qhigh,int pos) ;
int main( )
{
ios:: sync_with_stdio ( false ) ;
int t,b;
long long int n,c,p,q,v,i;
cin >> t;
while ( t-- )
{
cin >> n>> c;
for ( i= 0 ; i< 1000000 ; i++ )
{
lazy[ i] = 0 ;
segtree[ i] = 0 ;
}
for ( i= 0 ; i< c; i++ )
{
cin >> b;
if ( b== 0 )
{
cin >> p>> q>> v;
updatetree( 0 ,n- 1 ,v,p- 1 ,q- 1 ,0 ) ;
}
else
{
cin >> p>> q;
cout << addtree( 0 ,n- 1 ,p- 1 ,q- 1 ,0 ) << "\n " ;
}
}
}
return 0 ;
}
void updatetree( int low,int high,long long int value,int qlow,int qhigh,int pos)
{
if ( lazy[ pos] ! = 0 )
{
segtree[ pos] + = ( high- low+ 1 ) * lazy[ pos] ; // we store sum on segtree so find sum of all element because lazy has value which is to be transfered to all element so multiply with number of element
if ( low! = high)
{
lazy[ 2 * pos+ 1 ] + = lazy[ pos] ; // do not calculate sum at passing lazy
lazy[ 2 * pos+ 2 ] + = lazy[ pos] ; // lazy is lazy whatever parent had will pass to child
}
lazy[ pos] = 0 ;
}
if ( high < qlow|| low> high|| qhigh< low) // no need of low>high condition becasue input is correct but its OK
return ;
if ( qlow<= low&& qhigh>= high)
{
segtree[ pos] + = value* ( high- low+ 1 ) ; // same here as above find sum
if ( low! = high)
{
lazy[ 2 * pos+ 1 ] + = value;
lazy[ 2 * pos+ 2 ] + = value;
}
return ;
}
//if partial overlaps
long long int mid;
mid= ( low+ high) / 2 ;
updatetree( low,mid,value,qlow,qhigh,2 * pos+ 1 ) ;
updatetree( mid+ 1 ,high,value,qlow,qhigh,2 * pos+ 2 ) ; // you were doing it 2+pos+2 instead of 2*pos+2;
segtree[ pos] = ( segtree[ 2 * pos+ 1 ] + segtree[ 2 * pos+ 2 ] ) ;
}
long long int addtree( int low,int high,int qlow,int qhigh,int pos) //same thing here also :)
{
if ( lazy[ pos] ! = 0 )
{
segtree[ pos] + = ( high- low+ 1 ) * lazy[ pos] ;
if ( low! = high)
{
lazy[ 2 * pos+ 1 ] + = lazy[ pos] ;
lazy[ 2 * pos+ 2 ] + = lazy[ pos] ;
}
lazy[ pos] = 0 ;
}
if ( qlow> high|| qhigh< low|| high< low|| qhigh< qlow)
return 0 ;
if ( qlow<= low&& qhigh>= high)
{
return segtree[ pos] ;
}
long long int mid= ( low+ high) / 2 ;
long long int q,y;
q= addtree( low,mid,qlow,qhigh,2 * pos+ 1 ) ;
y= addtree( mid+ 1 ,high,qlow,qhigh,2 * pos+ 2 ) ;
return q+ y;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPGNzdGRsaWI+CiNpbmNsdWRlPGNzdGRpbz4KI2luY2x1ZGU8Y3N0cmluZz4KI2luY2x1ZGU8YWxnb3JpdGhtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwpsb25nIGxvbmcgaW50IHNlZ3RyZWVbMTAwMDAwMF07Ly8gbm8gbmVlZCBvZiBleHRyYSBzcGFjZSBpIHJlZHVjZWQgaXQKbG9uZyBsb25nIGludCBsYXp5WzEwMDAwMDBdOwp2b2lkIHVwZGF0ZXRyZWUoaW50IGxvdyxpbnQgaGlnaCxsb25nIGxvbmcgaW50IHZhbHVlLGludCBxbG93LGludCBxaGlnaCxpbnQgcG9zKTsgLy8gdmFsdWUgc2hvdWxkIGJlIGxvbmcgbG9uZwpsb25nIGxvbmcgaW50IGFkZHRyZWUoaW50IGxvdyxpbnQgaGlnaCxpbnQgcWxvdyxpbnQgcWhpZ2gsaW50IHBvcyk7CmludCBtYWluKCkKICAgewogICAgICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgICAgaW50IHQsYjsKICAgICAgIGxvbmcgbG9uZyBpbnQgIG4sYyxwLHEsdixpOwogICAgICAgY2luPj50OwogICAgICAgd2hpbGUodC0tKQogICAgICAgewogICAgICAgICAgICAgICAgICBjaW4+Pm4+PmM7CiAgICAgICAgICAgZm9yKGk9MDtpPDEwMDAwMDA7aSsrKQogICAgICAgICAgIHsKICAgICAgICAgICAgICAgbGF6eVtpXT0wOwogICAgICAgICAgICAgICBzZWd0cmVlW2ldPTA7CiAgICAgICAgICAgfQoKCiAgICAgICAgICAgZm9yKGk9MDtpPGM7aSsrKQogICAgICAgICAgIHsKICAgICAgICAgICAgY2luPj5iOwogICAgICAgICAgICBpZihiPT0wKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBjaW4+PnA+PnE+PnY7CiAgICAgICAgICAgICAgIHVwZGF0ZXRyZWUoMCxuLTEsdixwLTEscS0xLDApOwogICAgICAgICAgICB9CiAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBjaW4+PnA+PnE7CgogICAgICAgICAgICAgICAgY291dDw8YWRkdHJlZSgwLG4tMSxwLTEscS0xLDApPDwiXG4iOwogICAgICAgICAgICB9CiAgICAgICAgICAgfQogICAgICAgfQogICAgICAgcmV0dXJuIDA7CiAgIH0KCgp2b2lkIHVwZGF0ZXRyZWUoaW50IGxvdyxpbnQgaGlnaCxsb25nIGxvbmcgaW50IHZhbHVlLGludCBxbG93LGludCBxaGlnaCxpbnQgcG9zKQogICB7CgogICAgICAgaWYobGF6eVtwb3NdIT0wKQogICAgICAgIHsKICAgICAgICAgICAgc2VndHJlZVtwb3NdKz0oaGlnaC1sb3crMSkqbGF6eVtwb3NdOy8vIHdlIHN0b3JlIHN1bSBvbiBzZWd0cmVlIHNvIGZpbmQgc3VtIG9mIGFsbCBlbGVtZW50IGJlY2F1c2UgbGF6eSBoYXMgdmFsdWUgd2hpY2ggaXMgdG8gYmUgdHJhbnNmZXJlZCB0byBhbGwgZWxlbWVudCBzbyBtdWx0aXBseSB3aXRoIG51bWJlciBvZiBlbGVtZW50CiAgICAgICAgICAgIGlmKGxvdyE9aGlnaCkKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgbGF6eVsyKnBvcysxXSs9bGF6eVtwb3NdOy8vIGRvIG5vdCBjYWxjdWxhdGUgc3VtIGF0IHBhc3NpbmcgbGF6eQogICAgICAgICAgICAgIGxhenlbMipwb3MrMl0rPWxhenlbcG9zXTsvLyBsYXp5IGlzIGxhenkgd2hhdGV2ZXIgcGFyZW50IGhhZCB3aWxsIHBhc3MgdG8gY2hpbGQKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgbGF6eVtwb3NdPTA7CiAgICAgICAgfQogICAgICAgaWYoaGlnaCA8IHFsb3d8fGxvdz5oaWdofHxxaGlnaDxsb3cpLy8gbm8gbmVlZCBvZiBsb3c+aGlnaCBjb25kaXRpb24gYmVjYXN1ZSBpbnB1dCBpcyBjb3JyZWN0IGJ1dCBpdHMgT0sKICAgICAgICByZXR1cm47CiAgICAgICAgaWYocWxvdzw9bG93JiZxaGlnaD49aGlnaCkKICAgICAgICB7CiAgICAgICAgICAgIHNlZ3RyZWVbcG9zXSs9dmFsdWUqKGhpZ2gtbG93KzEpOy8vIHNhbWUgaGVyZSBhcyBhYm92ZSBmaW5kIHN1bQoKICAgICAgICAgICAgaWYobG93IT1oaWdoKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBsYXp5WzIqcG9zKzFdKz12YWx1ZTsKICAgICAgICAgICAgICAgIGxhenlbMipwb3MrMl0rPXZhbHVlOwogICAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gOwogICAgICAgIH0KICAgICAgICAvL2lmIHBhcnRpYWwgb3ZlcmxhcHMKICAgICAgICBsb25nIGxvbmcgaW50IG1pZDsKICAgICAgICBtaWQ9KGxvdytoaWdoKS8yOwogICAgICAgIHVwZGF0ZXRyZWUobG93LG1pZCx2YWx1ZSxxbG93LHFoaWdoLDIqcG9zKzEpOwogICAgICAgIHVwZGF0ZXRyZWUobWlkKzEsaGlnaCx2YWx1ZSxxbG93LHFoaWdoLDIqcG9zKzIpOyAvLyB5b3Ugd2VyZSBkb2luZyBpdCAyK3BvcysyIGluc3RlYWQgb2YgMipwb3MrMjsKICAgICAgICBzZWd0cmVlW3Bvc109KHNlZ3RyZWVbMipwb3MrMV0rc2VndHJlZVsyKnBvcysyXSk7CiAgIH0KCmxvbmcgbG9uZyBpbnQgYWRkdHJlZShpbnQgbG93LGludCBoaWdoLGludCBxbG93LGludCBxaGlnaCxpbnQgcG9zKSAvL3NhbWUgdGhpbmcgaGVyZSBhbHNvIDopCiAgICAgIHsKCiAgICAgIGlmKGxhenlbcG9zXSE9MCkKICAgICAgICB7CiAgICAgICAgc2VndHJlZVtwb3NdKz0oaGlnaC1sb3crMSkqbGF6eVtwb3NdOwogICAgICAgIGlmKGxvdyE9aGlnaCkKICAgICAgICAgewogICAgICAgICAgbGF6eVsyKnBvcysxXSs9bGF6eVtwb3NdOwogICAgICAgICAgbGF6eVsyKnBvcysyXSs9bGF6eVtwb3NdOwogICAgICAgICB9CiAgICAgICAgIGxhenlbcG9zXT0wOwogICAgICAgIH0KICAgICAgaWYocWxvdz5oaWdofHxxaGlnaDxsb3d8fGhpZ2g8bG93fHxxaGlnaDxxbG93KQogICAgICByZXR1cm4gMDsKCiAgICAgaWYocWxvdzw9bG93JiZxaGlnaD49aGlnaCkKICAgICB7CiAgICAgICAgIHJldHVybiBzZWd0cmVlW3Bvc107CiAgICAgfQoKICAgIGxvbmcgbG9uZyBpbnQgbWlkPShsb3craGlnaCkvMjsKICAgIGxvbmcgbG9uZyBpbnQgcSx5OwogICAgcT1hZGR0cmVlKGxvdyxtaWQscWxvdyxxaGlnaCwyKnBvcysxKTsKICAgIHk9YWRkdHJlZShtaWQrMSxoaWdoLHFsb3cscWhpZ2gsMipwb3MrMik7CiAgICByZXR1cm4gcSt5OwogICAgICB9Cg==