题目传送门
#include <stack>
#include <queue>
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll n , l , r , x , k , ans;
stack<ll>zmk;
int main(){
cin >> n;
for (int i = 1;i <= n;i++){
cin >> x;
if (x == 1) {
cin >> l >> r;
zmk.push(l) , zmk.push(r);
}
else if (x == 2){
ll r1 = zmk.top();
zmk.pop();
ans = 0;
cin >> k;
if (r1 - zmk.top() > k) ans = ((r1<<1) - k + 1) * k / 2 , r1 -= k , zmk.push(r1);
else if (r1 - zmk.top() == k) ans = (r1 + zmk.top()) * k / 2 , zmk.pop();
else{
while (r1 - zmk.top() < k){
ans+=(r1 + zmk.top()) * (r1 - zmk.top() + 1) / 2;
k -= r1 - zmk.top() + 1;
zmk.pop();
r1 = zmk.top();
zmk.pop();
}
if (r1 - zmk.top() > k) ans += ((r1<<1) - k + 1) * k / 2 , r1 -= k , zmk.push(r1);
else if (r1 - zmk.top() == k) ans += (r1 + zmk.top()) * k / 2 , zmk.pop();
}
cout << ans << endl;
}
}
return 0;
}