lg 5分
#include <bits/stdc++.h>
using namespace std;
const int N=2e6+10;
int q;
map <string,int> tran,sta,Sto;int cnt,cna;
int add[N],inS[N],Sst,Send;
int star[N],start[N];
map <int,string> NtoS;int S;
struct tempority{string type,name;}temp[N];
int main()
{
//freopen("struct.in","r",stdin);
//freopen("struct.out","w",stdout);
scanf("%d",&q);
sta["byte"]=1,sta["short"]=2,sta["int"]=4,sta["long"]=8;
cna=-1;
while (q--)
{
int op;
scanf("%d",&op);
if (op==1)
{
Sst=cna+1;
string Sname;int k;
cin>>Sname>>k;
int r;
int dui=0,size=0;
for (int i=1;i<=k;i++)
{
string type,name;
cin>>type>>name;
int r2;
temp[i].type=type,temp[i].name=name;
dui=max(dui,sta[type]);
}
for (int i=1;i<=k;i++)
{
string type,name;
type=temp[i].type,name=temp[i].name;
Sto[name]=++cnt;
star[Sto[name]]=sta[type];
start[Sto[name]]=cna+1;
for (int j=1;j<=sta[type];j++){add[++cna]=Sto[name];}
cna=cna-sta[type]+dui;
size+=dui;
NtoS[Sto[name]]=name;
}
cout<<size<<" "<<dui<<endl;
Send=Sst+size;
}
if (op==2)
{
string type,name;
cin>>type>>name;
int r3;
tran[name]=++cnt;
if (sta[type]==0){S=tran[name];start[tran[name]]=Sst;cout<<Sst<<endl;}
else
{
start[tran[name]]=cna+1;
star[tran[name]]=sta[name];
for (int i=1;i<=sta[type];i++) add[++cna]=tran[name];
cout<<start[tran[name]]<<endl;
}
NtoS[tran[name]]=name;
}
if (op==3)
{
string road;
cin>>road;
int r1;
string name="";
int type=0;
for (int i=0;i<road.size();i++) if (road[i]=='.') type=1;
if (type==1)
{
for (int i=0;i<road.size();i++)
{
if (road[i]=='.') name="";
else name+=road[i];
}
cout<<start[Sto[name]]<<endl;
}
else cout<<start[tran[road]]<<endl;
}
if (op==4)
{
long long x;
scanf("%lld",&x);
if (x>N-10){cout<<"ERR"<<endl;continue;}
if (add[x]==0){cout<<"ERR"<<endl;continue;}
if (Sst<=x && x<=Send){
cout<<NtoS[S]<<"."<<NtoS[add[x]]<<endl;
}
else cout<<NtoS[add[x]]<<endl;
}
}
return 0;
}