```cpp
#include <iostream>
#include <cstdio>
using namespace std;
struct node
{
unsigned long long l, r;
};
node stack[5000100];
int main()
{
//freopen("stack2.in","r",stdin);
//freopen("stack2.ans","w",stdout);
int m;
scanf("%d", &m);
int top = 0;
while (m--)
{
int op;
scanf("%d", &op);
if (op == 1)
{
unsigned long long l ,r;
scanf("%lld%lld", &l, &r);
stack[++top] = {l, r};
}
if (op == 2)
{
long long k;
scanf("%lld", &k);
unsigned long long sum = 0, ans = 0;
while (k > sum)
{
sum += stack[top].r - stack[top].l + 1;
ans += (stack[top].r + stack[top].l) * (stack[top].r - stack[top].l + 1) / 2;
top --;
}
top ++;
if (k == sum)
{
printf("%lld\n", ans);
top --;
continue;
}
else
{
ans -= ((stack[top].l * 2 + sum - k - 1)) * (sum - k) / 2;
stack[top].r = stack[top].l + sum - k - 1;
printf("%lld\n", ans);
}
}
}
return 0;
}
```
by wangjunji @ 2021-09-20 13:46:03