rt
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+10;
const double eps=1e-10;
int n,cnt;
struct line
{
double k,b;
double ask(int x)
{
return (x-1)*k+b;
}
}a[N];
#define lc x<<1
#define rc x<<1|1
#define mid ((l+r)>>1)
struct LSegtree
{
int id[N<<1];
inline void updata(int x,int l,int r,int i)
{
if(!id[x])
{
id[x]=i;
return;
}
if(a[i].ask(mid)-a[id[x]].ask(mid)>eps)swap(i,id[x]);
if(a[i].ask(l)-a[id[x]].ask(l)>eps||(a[i].ask(l)==a[id[x]].ask(l)&&i<id[x]))updata(lc,l,mid,i);
if(a[i].ask(r)-a[id[x]].ask(r)>eps||(a[i].ask(r)==a[id[x]].ask(r)&&i<id[x]))updata(rc,mid+1,r,i);
}
inline double query(int x,int l,int r,int k)
{
double res=0;
if(id[x])res=a[id[x]].ask(k);
if(l==r)return res;
if(k<=mid)res=max(res,query(lc,l,mid,k));
else res=max(res,query(rc,mid+1,r,k));
}
}tree;
signed main()
{
scanf("%lld",&n);
for(int i=1;i<=n;i++)
{
string opt;
cin>>opt;
if(opt=="Query")
{
int t;
scanf("%lld",&t);
printf("%lld\n",(int)tree.query(1,1,50010,t)/100);
}
else
{
double s,p;
scanf("%lf%lf",&s,&p);
cnt++;
a[cnt].b=s;
a[cnt].k=p;
tree.updata(1,1,50010,cnt);
}
}
return 0;
}