#include <bits/extc++.h>
#define int long long
using namespace std;
using namespace __gnu_cxx;
using namespace __gnu_pbds;
typedef short i16;
typedef unsigned short u16;
// typedef int i32;
typedef unsigned u32;
typedef long long i64;
typedef unsigned long long u64;
typedef long isize;
typedef unsigned long usize;
typedef float f32;
typedef double f64;
typedef long double f128;
stack<pair<int, int>> s;
signed main()
{
int n;
cin >> n;
while (n--)
{
int o;
cin >> o;
if (o & 1)
{
int l, r;
cin >> l >> r;
s.emplace(l, r);
}
else
{
int k, u{};
cin >> k;
while (k)
if (auto [l,r]{s.top()}; r - l + 1 <= k)
k -= r - l + 1, s.pop(), u += (l + r) * (r - l + 1) / 2;
else
cout << u + (r * 2 - k + 1) * k / 2 << ' ',
s.top().second -= k,
k = 0;
}
}
return 0;
}
其中,第三十八行 auto [l,r]{s.top()}
是指把 first
赋给 l
,把 second
赋给 r
,然后进行后面的判断。