图片说明
给你一个A,B,C,D并且A<=B<=C<=D问A<=x<=B<=y<=C<=z<=D问x,y,z可以组成多少个三角形。
思路:我们枚举x+y的值。那么z的取值范围就知道了。现在求x+y=i的方案数。

如果x为A,那么y为i-A
如果x为A+1,那么y为i-A-1
...
如果x为B,那么y为i-B
容易观察到y的变化范围为[i-B,i-A]
不过y还需要在[B,C]之内,取区间交就行了

#include <bits/stdc++.h>
#define LL long long
#define mid (l+r>>1)
using namespace std;

int main(){

    LL a, b, c, d, ans=0;
    cin>>a>>b>>c>>d;
    for(LL i=a+b; i<=b+c; i++){
        if(i>c){
            LL lenc=min(i-c, d-c+1);
            LL ly=max(b, i-b), ry=min(c, i-a);
            ans+=lenc*(ry-ly+1);
        }
    }
    cout<<ans<<endl;

    return 0;
}