rt样例全过了,0分
#include<cstdio>
#include<algorithm>
#include<set>
#include<cmath>
#define N 1919810
#define int long long
#define lc p<<1
#define rc p<<1|1
#define clear(a,b,c) for(int i=0;i<=c;i++)a[i]=b
#define ct Chtholly_tree
#define Chtholly set<Chtholly_tree>::iterator
using namespace std;
inline int read(){
int ans=0,sym=1;
char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')sym=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){ans=ans*10+ch-'0';ch=getchar();}
return ans*sym;
}
int n,m;
struct Chtholly_tree{
int l,r;
mutable int val;
Chtholly_tree(int a=-1,int b=-1,int c=0){l=a,r=b,val=c;}
bool operator<(const Chtholly_tree &C)const{return l<C.l;}
};
set<Chtholly_tree>st;
Chtholly split(int p){
Chtholly it=st.lower_bound(p);
if(it!=st.end()&&it->l==p)return it;
it--;ct tmp=*it;st.erase(it);
st.insert(ct(tmp.l,p-1,tmp.val));
return st.insert(ct(p,tmp.r,tmp.val)).first;
}
struct Segement_tree{
int l,r,val,tag;
}s[N];
void build(int p,int l,int r){
s[p].l=l,s[p].r=r;
if(l==r)return;
build(lc,l,(l+r)/2);
build(rc,(l+r)/2+1,r);
}
void pushup(int p){s[p].val=s[lc].val+s[rc].val;}
void pushdown(int p){
if(!s[p].tag)return;
s[lc].tag+=s[p].tag;
s[rc].tag+=s[p].tag;
s[lc].val+=s[p].tag*(s[lc].r-s[lc].l+1);
s[rc].val+=s[p].tag*(s[rc].r-s[rc].l+1);
s[p].tag=0;
}
void add(int p,int l,int r,int k){
pushdown(p);
if(s[p].l>r||s[p].r<l)return;
if(s[p].l>=l&&s[p].r<=r){
s[p].val+=k*(s[p].r-s[p].l+1);
s[p].tag+=k;
return;
}
pushdown(p);
add(lc,l,r,k);add(rc,l,r,k);
pushup(p);
}
int query(int p,int l,int r){
pushdown(p);
if(s[p].l>r||s[p].r<l)return 0;
if(s[p].l>=l&&s[p].r<=r)return s[p].val;
return query(lc,l,r)+query(rc,l,r);
}
void assign(int l,int r,int val){
Chtholly right=split(r+1),left=split(l),it=left;
for(;left!=right;left++){
int L=left->l,R=left->r,v=left->val;
add(1,L,R,abs(val-v));
}
st.erase(it,right);
st.insert(ct(l,r,val));
}
signed main(){
n=read(),m=read();
build(1,1,n);
for(int i=1;i<=n;i++)st.insert(ct(i,i,i));
for(int i=1;i<=m;i++){
int op=read(),l=read(),r=read(),x;
if(op==1)x=read(),assign(l,r,x);
else printf("%lld\n",query(1,l,r));
}
return 0;
}