#include<iostream>
using namespace std;
/*模拟栈,操作数,栈顶*/
int box[514114][2],n,btoxp=0;
/*团子没法吃了(悲)*/
unsigned long long k,res;
/*购买数量,价格总和*/
int main(){
//输入 操作数;
scanf("%d",&n);
//输入 所有操作;
for(int i=0,mod,l,r;i<n;i++){
//输入 制作或卖出;
scanf("%d",&mod);
//若 制作;
if(mod==1){
//输入 团子颜色 的首尾;
scanf("%d %d",&l,&r);
//打包 并 压入栈中;
box[btoxp][0]=l;
box[btoxp][1]=r;
//栈顶+1;
btoxp++;
//若 卖出;
}else if(mod==2){
//输入 卖出数量
scanf("%llu",&k);
//初始化 价格总和;
res=0;
//开始 拿出团子;
while(k){
//若 下一包团子 过多;
if(box[btoxp-1][1]-box[btoxp-1][0]+1>k){
//拆开包装;
res+=(box[btoxp-1][1]*2-k+1)*k/2;
//把团子 拿出 并 计费;
box[btoxp-1][1]-=k;
//结束 拿出团子;
break;
//否则 若 下一包团子 刚好;
}else if(box[btoxp-1][1]-box[btoxp-1][0]+1==k){
//把包装 弹出 并 计费;
res+=(box[btoxp-1][1]+box[btoxp-1][0])*k/2;
//栈顶-1;
btoxp--;
//结束 拿出团子;
break;
}else{//否则 下一包团子 必然 过少
//将 这包团子 弹出 并 计费;
res+=(box[btoxp-1][1]+box[btoxp-1][0])*(box[btoxp-1][1]-box[btoxp-1][0]+1)/2;
//还要买的数量 减少 这包团子的数量;
k-=(box[btoxp-1][1]-box[btoxp-1][0]+1);
//栈顶-1;
btoxp--;
}
}
//输出 价格总和;
printf("%llu\n",res);
}else{//下面两行 永远 不 运行;
printf("Input Error!!!\n");
printf("Error Code:IE");
}
}
return/*结束*/0;
}