@[DengTJ](/space/show?uid=26971)
我这样,能拿80分
``` cpp
#include<iostream>
#include<cstdio>
using namespace std;
int n,m,len;
struct s{
int left,right,num;
};
s a[1003];
int main() {
// freopen("segment.in","r",stdin);
// freopen("segment.out","w",stdout);
cin>>n>>m;
for(int i=1;i<=m;i++) {
int l,r,k;
int check;
cin>>check;
if(check==1) {
cin>>l>>r>>k;
a[++len].left=l;
a[len].right=r;
a[len].num=k;
}
else {
cin>>l>>r;
long long ans=0;
for(int j=1;j<=len;j++) {
if(l>a[j].right||r<a[j].left) continue;
if(l<a[j].left) {
if(a[j].right>=r) {
ans+=(r-a[j].left+1)*a[j].num;
}
if(a[j].right<r) ans+=(a[j].right-a[j].left+1)*a[j].num;
}
else if(a[j].left<=r){
if(a[j].right>r) ans+=(r-l+1)*a[j].num;
else ans+=(a[j].right-l+1)*a[j].num;
}
}
cout<<ans<<endl;
}
}
}
```
by 任弈凡 @ 2018-10-31 13:07:46
再开$long long$能拿$100$分
by 任弈凡 @ 2018-10-31 14:15:52