栈模拟+求和定理
#include <bits/stdc++.h>
using namespace std;
int n,T,l,r;
long long k,sum;
struct q
{
int l,r;
};
stack<q> s;
int main()
{
cin >> n;
while(n--)
{
cin >> T;
if(T == 1)
{
cin >> l >> r;
s.push({l,r});
}
else
{
cin >> k;
while(k)
{
q a = s.top();
long long len = a.r-a.l+1;
if(len <= k)
{
sum += 1ll*len*(a.r+a.l)/2;
k -= len;
s.pop();
}
else
{
sum += 1ll*k*(a.r-k+1 + a.r)/2;
k=0;
s.pop();
s.push({a.l,a.r-k});
}
}
cout << sum << endl;
sum=0;
}
}
return 0;
}