#include <bits/stdc++.h>
using namespace std;
int n;
long long ans;
int ruler=1;
struct SIT
{
int _ruler;
long long _ans;
long long _preans;
};
struct Ins
{
int opt;
int eff;
bool _ed;
SIT sit;
}ins[200010];
long long preans;
long long deal[200001];
void renew(int x,int cur)
{
ans=ins[x-1].sit._ans;
preans=ins[x-1].sit._preans;
ruler=ins[x-1].sit._ruler;
// for(int i=x+1;i<cur;i++)
// {
// if(i==x)
// {
// continue;
// }
// switch(ins[i].opt)
// {
// case 1:
// ruler++;
// preans=deal[ruler];
// break;
// case 2:
// ruler=1;
// ans+=preans;
// preans=1ll;
// break;
// case 3:
// renew(ins[i].eff,i);
// break;
// }
// }
for(int i=x+1;i<cur;i++)
{
switch(ins[i].opt)
{
case 1:
ruler++;
preans=deal[ruler];
break;
case 2:
ruler=1;
ans+=preans;
preans=1ll;
break;
case 3:
break;
}
if(ins[i]._ed==1&&i!=cur-1)
{
ins[i].sit._ans=ans;
ins[i].sit._preans=preans;
ins[i].sit._ruler=ruler;
}
}
return;
}
int main()
{
preans=1ll;
scanf("%d",&n);
for(int i=1;i<=200000;i++)
{
deal[i]=i+deal[i-1];
}
for(int i=1;i<=n;i++)
{
scanf("%d",&ins[i].opt);
switch(ins[i].opt)
{
case 1:
break;
case 2:
break;
case 3:
scanf("%d",&ins[i].eff);
ins[ins[i].eff-1]._ed=1;
break;
}
}
ins[0].sit._ruler=1;
ins[0].sit._preans=1ll;
ins[0].sit._ans=0ll;
for(int i=1;i<=n;i++)
{
switch(ins[i].opt)
{
case 1:
ruler++;
preans=deal[ruler];
printf("%lld\n",ans+preans);
break;
case 2:
ruler=1;
ans+=preans;
preans=1ll;
printf("%lld\n",ans+preans);
break;
case 3:
renew(ins[i].eff,i);
printf("%lld\n",ans+preans);
break;
}
if(ins[i]._ed==1)
{
ins[i].sit._ans=ans;
ins[i].sit._preans=preans;
ins[i].sit._ruler=ruler;
}
}
return 0;
}
测试小样例都过了,绝对不是正解
但只嫖了20分确实非常的淦