我可能是太笨了吧
#include<cstdio>
using namespace std;
inline int sum(int l,int r){
return (l+r)*(r-l+1)/2;
}
struct A
{
int l,r;
};
A list[500000];int list_len;
void push(int l,int r){
list[list_len].l = l;
list[list_len].r = r;
++ list_len;
}
int pop(int k){
int a;
if(list[list_len-1].r - list[list_len-1].l + 1 > k)
{
a = sum(list[list_len-1].r - k + 1,list[list_len-1].r);
list[list_len-1].r -= k;
return a;
}
else
{
a = sum(list[list_len-1].l,list[list_len-1].r);
k -= list[list_len-1].r - list[list_len].l + 1;
-- list_len;
a += pop(k);
return a;
}
}
int main(void){
int n,opera,num1,num2,ret;
scanf("%d",&n);
for(int i = 0;i < n;++ i)
{
scanf("%d",&opera);
if(opera == 1)
{
scanf("%d%d",&num1,&num2);
push(num1,num2);
}
else
{
scanf("%d",&num1);
ret = pop(num1);
printf("%d ",ret);
}
}
return 0;
}