#include <bits/stdc++.h>
#define FOR(i,a,b) for(int i=a;i<b;i++)
#define REP(i,b) FOR(i,0,b)
#define PB push_back
#define MP make_pair
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
int read(){
int i;
scanf("%d",&i);
return i;
}
const int maxN=200000;
struct Pos{
int x,y;
bool operator<(const Pos& rhs)const{
if(x!=rhs.x)
return x<rhs.x;
else
return y>rhs.y;
}
bool operator==(const Pos& rhs)const{
return x==rhs.x&&y==rhs.y;
}
} none=Pos{-1,-1};
ll Rect(const Pos& tl,const Pos& br){
return ll(tl.y-br.y)*(br.x-tl.x);
}
struct Query{
Pos p;
int i;
bool operator<(const Query& rhs)const{
return p<rhs.p;
}
};
struct RectSeg{
Pos d[1<<19][4];
int s;
void Init(int n){
s=1;
while(s<n)s*=2;
fill(d[0],d[s*2],none);
}
void Update(int i,Pos p){
i+=s;
fill(d[i],d[i]+4,p);
while((i/=2)>=1){
d[i][0]=d[i*2][0];
d[i][1]=d[i*2][3];
d[i][2]=d[i*2+1][0];
d[i][3]=d[i*2+1][3];
if(d[i][0]==none)
d[i][0]=d[i][2];
if(d[i][3]==none)
d[i][3]=d[i][1];
}
}
ll GetMax(Pos p){
if(d[1][1]==none&&d[1][2]==none)
return 0;
int i=1;
while(i<s){
if(d[i][1]==none)
i=i*2+1;
else if(d[i][2]==none)
i=i*2;
else if(Rect(d[i][1],p)>Rect(d[i][2],p))
i=i*2;
else
i=i*2+1;
}
return Rect(d[i][0],p);
}
} rectSeg;
ll ans[maxN];
struct Solver{
Pos convex[maxN];
int pr[maxN],nx[maxN];
void Connect(int a,int b){
if(a!=-1)nx[a]=b;
if(b!=-1)pr[b]=a;
}
vector<int> del[maxN];
Query qs[maxN];
void ComputeY(const Pos& a,const Pos& b,int x,ll& d,ll& e,ll& f){
ll p=ll(b.y-a.y)*(x-a.x);
e=b.x-a.x;
ll q=p/e;
d=b.y-q;
f=p-q*e;
}
void AddDel(int b,int u,int v){
if(b==-1)
return;
int a=pr[b],c=nx[b];
if(a==-1||c==-1)
return;
int l=u-1,r=v;
while(r-l>1){
int m=(l+r)/2;
ll d,e,f,D,E,F;
ComputeY(convex[a],convex[b],qs[m].p.x,d,e,f);
ComputeY(convex[b],convex[c],qs[m].p.x,D,E,F);
if(d!=D){
if(d<D)
l=m;
else
r=m;
}else if(f*E>F*e)
l=m;
else
r=m;
}
if(r<v)
del[r].PB(b);
}
void Solve(vector<Pos>& ps,const vector<Query>& _qs){
int s=0,lastX=-1,lastY=-1,q=_qs.size();
copy(_qs.begin(),_qs.end(),qs);
sort(ps.begin(),ps.end());
for(auto&& p:ps)
if(lastX<p.x&&lastY<p.y){
convex[s++]=p;
qs[q++]=Query{p,-1};
lastX=p.x;
lastY=p.y;
}
fill(pr,pr+s,-1);
fill(nx,nx+s,-1);
rectSeg.Init(s);
sort(qs,qs+q);
REP(i,q)
del[i].clear();
int k=0;
REP(i,q){
for(int j=0;j<(int)del[i].size();j++){
int d=del[i][j];
if(pr[d]==-1&&nx[d]==-1)
continue;
Connect(pr[d],nx[d]);
rectSeg.Update(d,none);
AddDel(pr[d],i,q);
AddDel(nx[d],i,q);
pr[d]=nx[d]=-1;
}
if(qs[i].i==-1){
rectSeg.Update(k,qs[i].p);
Connect(k-1,k);
AddDel(k-1,i+1,q);
k++;
}else
ans[qs[i].i]=max(ans[qs[i].i],rectSeg.GetMax(qs[i].p));
}
}
} solver;
struct QuerySeg{
vector<Pos> ps[1<<19];
vector<Query> qs[1<<19];
int s;
void Init(int n){
s=1;
while(s<n)s*=2;
}
void AddPos(int b,int e,int l,int r,Pos p,int i){
if(e<=l||r<=b)
return;
if(b<=l&&r<=e){
ps[i].PB(p);
return;
}
AddPos(b,e,l,(l+r)/2,p,i*2);
AddPos(b,e,(l+r)/2,r,p,i*2+1);
}
void AddPos(int b,int e,Pos p){
if(b<e)
AddPos(b,e,0,s,p,1);
}
void AddQuery(int i,Query q){
i+=s;
while(i>=1){
qs[i].PB(q);
i/=2;
}
}
void SolveAll(){
FOR(i,1,s*2)
if(!ps[i].empty()&&!qs[i].empty())
solver.Solve(ps[i],qs[i]);
}
} querySeg;
Pos ps[maxN];
Query qs[maxN];
int be[maxN][2];
int main(){
memset(be,-1,sizeof(be));
int n=read(),p=0,q=0;
vector<pii> v;
REP(i,n){
int t=read();
if(t==1){
int x=read(),y=read();
ps[p]=Pos{x,y};
v.PB(MP(p++,0));
}else if(t==2){
v.PB(MP(read(),1));
}else{
for(auto x:v)
be[x.first][x.second]=q;
v.clear();
int x=read(),y=read();
qs[q]=Query{Pos{x,y},q};
q++;
}
}
querySeg.Init(q);
REP(i,p){
if(be[i][0]==-1)
continue;
else if(be[i][1]==-1)
be[i][1]=querySeg.s;
querySeg.AddPos(be[i][0],be[i][1],ps[i]);
}
REP(i,q)
querySeg.AddQuery(i,qs[i]);
querySeg.SolveAll();
REP(i,q){
if(ans[i]==0)ans[i]=-1;
printf("%lld\n",ans[i]);
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiAKI2RlZmluZSBGT1IoaSxhLGIpIGZvcihpbnQgaT1hO2k8YjtpKyspCiNkZWZpbmUgUkVQKGksYikgRk9SKGksMCxiKQojZGVmaW5lIFBCIHB1c2hfYmFjawojZGVmaW5lIE1QIG1ha2VfcGFpcgogCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKdHlwZWRlZiBsb25nIGxvbmcgbGw7CnR5cGVkZWYgcGFpcjxpbnQsaW50PiBwaWk7CiAKaW50IHJlYWQoKXsKCWludCBpOwoJc2NhbmYoIiVkIiwmaSk7CglyZXR1cm4gaTsKfQogCmNvbnN0IGludCBtYXhOPTIwMDAwMDsKIApzdHJ1Y3QgUG9zewoJaW50IHgseTsKCWJvb2wgb3BlcmF0b3I8KGNvbnN0IFBvcyYgcmhzKWNvbnN0ewoJCWlmKHghPXJocy54KQoJCQlyZXR1cm4geDxyaHMueDsKCQllbHNlCgkJCXJldHVybiB5PnJocy55OwoJfQoJYm9vbCBvcGVyYXRvcj09KGNvbnN0IFBvcyYgcmhzKWNvbnN0ewoJCXJldHVybiB4PT1yaHMueCYmeT09cmhzLnk7Cgl9Cn0gbm9uZT1Qb3N7LTEsLTF9OwogCmxsIFJlY3QoY29uc3QgUG9zJiB0bCxjb25zdCBQb3MmIGJyKXsKCXJldHVybiBsbCh0bC55LWJyLnkpKihici54LXRsLngpOwp9CiAKc3RydWN0IFF1ZXJ5ewoJUG9zIHA7CglpbnQgaTsKCWJvb2wgb3BlcmF0b3I8KGNvbnN0IFF1ZXJ5JiByaHMpY29uc3R7CgkJcmV0dXJuIHA8cmhzLnA7Cgl9Cn07CiAKc3RydWN0IFJlY3RTZWd7CglQb3MgZFsxPDwxOV1bNF07CglpbnQgczsKCXZvaWQgSW5pdChpbnQgbil7CgkJcz0xOwoJCXdoaWxlKHM8bilzKj0yOwoJCWZpbGwoZFswXSxkW3MqMl0sbm9uZSk7Cgl9Cgl2b2lkIFVwZGF0ZShpbnQgaSxQb3MgcCl7CgkJaSs9czsKCQlmaWxsKGRbaV0sZFtpXSs0LHApOwoJCXdoaWxlKChpLz0yKT49MSl7CgkJCWRbaV1bMF09ZFtpKjJdWzBdOwoJCQlkW2ldWzFdPWRbaSoyXVszXTsKCQkJZFtpXVsyXT1kW2kqMisxXVswXTsKCQkJZFtpXVszXT1kW2kqMisxXVszXTsKCQkJaWYoZFtpXVswXT09bm9uZSkKCQkJCWRbaV1bMF09ZFtpXVsyXTsKCQkJaWYoZFtpXVszXT09bm9uZSkKCQkJCWRbaV1bM109ZFtpXVsxXTsKCQl9Cgl9CglsbCBHZXRNYXgoUG9zIHApewoJCWlmKGRbMV1bMV09PW5vbmUmJmRbMV1bMl09PW5vbmUpCgkJCXJldHVybiAwOwoJCWludCBpPTE7CgkJd2hpbGUoaTxzKXsKCQkJaWYoZFtpXVsxXT09bm9uZSkKCQkJCWk9aSoyKzE7CgkJCWVsc2UgaWYoZFtpXVsyXT09bm9uZSkKCQkJCWk9aSoyOwoJCQllbHNlIGlmKFJlY3QoZFtpXVsxXSxwKT5SZWN0KGRbaV1bMl0scCkpCgkJCQlpPWkqMjsKCQkJZWxzZQoJCQkJaT1pKjIrMTsKCQl9CgkJcmV0dXJuIFJlY3QoZFtpXVswXSxwKTsKCX0KfSByZWN0U2VnOwogCmxsIGFuc1ttYXhOXTsKc3RydWN0IFNvbHZlcnsKCVBvcyBjb252ZXhbbWF4Tl07CglpbnQgcHJbbWF4Tl0sbnhbbWF4Tl07Cgl2b2lkIENvbm5lY3QoaW50IGEsaW50IGIpewoJCWlmKGEhPS0xKW54W2FdPWI7CgkJaWYoYiE9LTEpcHJbYl09YTsKCX0KCXZlY3RvcjxpbnQ+IGRlbFttYXhOXTsKCVF1ZXJ5IHFzW21heE5dOwoJdm9pZCBDb21wdXRlWShjb25zdCBQb3MmIGEsY29uc3QgUG9zJiBiLGludCB4LGxsJiBkLGxsJiBlLGxsJiBmKXsKCQlsbCBwPWxsKGIueS1hLnkpKih4LWEueCk7CgkJZT1iLngtYS54OwoJCWxsIHE9cC9lOwoJCWQ9Yi55LXE7CgkJZj1wLXEqZTsKCX0KCXZvaWQgQWRkRGVsKGludCBiLGludCB1LGludCB2KXsKCQlpZihiPT0tMSkKCQkJcmV0dXJuOwoJCWludCBhPXByW2JdLGM9bnhbYl07CgkJaWYoYT09LTF8fGM9PS0xKQoJCQlyZXR1cm47CgkJaW50IGw9dS0xLHI9djsKCQl3aGlsZShyLWw+MSl7CgkJCWludCBtPShsK3IpLzI7CgkJCWxsIGQsZSxmLEQsRSxGOwoJCQlDb21wdXRlWShjb252ZXhbYV0sY29udmV4W2JdLHFzW21dLnAueCxkLGUsZik7CgkJCUNvbXB1dGVZKGNvbnZleFtiXSxjb252ZXhbY10scXNbbV0ucC54LEQsRSxGKTsKCQkJaWYoZCE9RCl7CgkJCQlpZihkPEQpCgkJCQkJbD1tOwoJCQkJZWxzZQoJCQkJCXI9bTsKCQkJfWVsc2UgaWYoZipFPkYqZSkKCQkJCWw9bTsKCQkJZWxzZQoJCQkJcj1tOwoJCX0KCQlpZihyPHYpCgkJCWRlbFtyXS5QQihiKTsKCX0KCXZvaWQgU29sdmUodmVjdG9yPFBvcz4mIHBzLGNvbnN0IHZlY3RvcjxRdWVyeT4mIF9xcyl7CgkJaW50IHM9MCxsYXN0WD0tMSxsYXN0WT0tMSxxPV9xcy5zaXplKCk7CgkJY29weShfcXMuYmVnaW4oKSxfcXMuZW5kKCkscXMpOwoJCXNvcnQocHMuYmVnaW4oKSxwcy5lbmQoKSk7CgkJZm9yKGF1dG8mJiBwOnBzKQoJCQlpZihsYXN0WDxwLngmJmxhc3RZPHAueSl7CgkJCQljb252ZXhbcysrXT1wOwoJCQkJcXNbcSsrXT1RdWVyeXtwLC0xfTsKCQkJCWxhc3RYPXAueDsKCQkJCWxhc3RZPXAueTsKCQkJfQoJCQoJCWZpbGwocHIscHIrcywtMSk7CgkJZmlsbChueCxueCtzLC0xKTsKCQlyZWN0U2VnLkluaXQocyk7CgkJc29ydChxcyxxcytxKTsKCQlSRVAoaSxxKQoJCQlkZWxbaV0uY2xlYXIoKTsKCQlpbnQgaz0wOwoJCVJFUChpLHEpewoJCQlmb3IoaW50IGo9MDtqPChpbnQpZGVsW2ldLnNpemUoKTtqKyspewoJCQkJaW50IGQ9ZGVsW2ldW2pdOwoJCQkJaWYocHJbZF09PS0xJiZueFtkXT09LTEpCgkJCQkJY29udGludWU7CgkJCQlDb25uZWN0KHByW2RdLG54W2RdKTsKCQkJCXJlY3RTZWcuVXBkYXRlKGQsbm9uZSk7CgkJCQlBZGREZWwocHJbZF0saSxxKTsKCQkJCUFkZERlbChueFtkXSxpLHEpOwoJCQkJcHJbZF09bnhbZF09LTE7CgkJCX0KCQkJaWYocXNbaV0uaT09LTEpewoJCQkJcmVjdFNlZy5VcGRhdGUoayxxc1tpXS5wKTsKCQkJCUNvbm5lY3Qoay0xLGspOwoJCQkJQWRkRGVsKGstMSxpKzEscSk7CgkJCQlrKys7CgkJCX1lbHNlCgkJCQlhbnNbcXNbaV0uaV09bWF4KGFuc1txc1tpXS5pXSxyZWN0U2VnLkdldE1heChxc1tpXS5wKSk7CgkJfQoJfQp9IHNvbHZlcjsKIApzdHJ1Y3QgUXVlcnlTZWd7Cgl2ZWN0b3I8UG9zPiBwc1sxPDwxOV07Cgl2ZWN0b3I8UXVlcnk+IHFzWzE8PDE5XTsKCWludCBzOwoJdm9pZCBJbml0KGludCBuKXsKCQlzPTE7CgkJd2hpbGUoczxuKXMqPTI7Cgl9Cgl2b2lkIEFkZFBvcyhpbnQgYixpbnQgZSxpbnQgbCxpbnQgcixQb3MgcCxpbnQgaSl7CgkJaWYoZTw9bHx8cjw9YikKCQkJcmV0dXJuOwoJCWlmKGI8PWwmJnI8PWUpewoJCQlwc1tpXS5QQihwKTsKCQkJcmV0dXJuOwoJCX0KCQlBZGRQb3MoYixlLGwsKGwrcikvMixwLGkqMik7CgkJQWRkUG9zKGIsZSwobCtyKS8yLHIscCxpKjIrMSk7Cgl9Cgl2b2lkIEFkZFBvcyhpbnQgYixpbnQgZSxQb3MgcCl7CgkJaWYoYjxlKQoJCQlBZGRQb3MoYixlLDAscyxwLDEpOwoJfQoJdm9pZCBBZGRRdWVyeShpbnQgaSxRdWVyeSBxKXsKCQlpKz1zOwoJCXdoaWxlKGk+PTEpewoJCQlxc1tpXS5QQihxKTsKCQkJaS89MjsKCQl9Cgl9Cgl2b2lkIFNvbHZlQWxsKCl7CgkJRk9SKGksMSxzKjIpCgkJCWlmKCFwc1tpXS5lbXB0eSgpJiYhcXNbaV0uZW1wdHkoKSkKCQkJCXNvbHZlci5Tb2x2ZShwc1tpXSxxc1tpXSk7Cgl9Cn0gcXVlcnlTZWc7CiAKUG9zIHBzW21heE5dOwpRdWVyeSBxc1ttYXhOXTsKaW50IGJlW21heE5dWzJdOwogCmludCBtYWluKCl7CgltZW1zZXQoYmUsLTEsc2l6ZW9mKGJlKSk7CglpbnQgbj1yZWFkKCkscD0wLHE9MDsKCXZlY3RvcjxwaWk+IHY7CglSRVAoaSxuKXsKCQlpbnQgdD1yZWFkKCk7CgkJaWYodD09MSl7CgkJCWludCB4PXJlYWQoKSx5PXJlYWQoKTsKCQkJcHNbcF09UG9ze3gseX07CgkJCXYuUEIoTVAocCsrLDApKTsKCQl9ZWxzZSBpZih0PT0yKXsKCQkJdi5QQihNUChyZWFkKCksMSkpOwoJCX1lbHNlewoJCQlmb3IoYXV0byB4OnYpCgkJCQliZVt4LmZpcnN0XVt4LnNlY29uZF09cTsKCQkJdi5jbGVhcigpOwoJCQlpbnQgeD1yZWFkKCkseT1yZWFkKCk7CgkJCXFzW3FdPVF1ZXJ5e1Bvc3t4LHl9LHF9OwoJCQlxKys7CgkJfQoJfQoJcXVlcnlTZWcuSW5pdChxKTsKCVJFUChpLHApewoJCWlmKGJlW2ldWzBdPT0tMSkKCQkJY29udGludWU7CgkJZWxzZSBpZihiZVtpXVsxXT09LTEpCgkJCWJlW2ldWzFdPXF1ZXJ5U2VnLnM7CgkJcXVlcnlTZWcuQWRkUG9zKGJlW2ldWzBdLGJlW2ldWzFdLHBzW2ldKTsKCX0KCVJFUChpLHEpCgkJcXVlcnlTZWcuQWRkUXVlcnkoaSxxc1tpXSk7CglxdWVyeVNlZy5Tb2x2ZUFsbCgpOwoJUkVQKGkscSl7CgkJaWYoYW5zW2ldPT0wKWFuc1tpXT0tMTsKCQlwcmludGYoIiVsbGRcbiIsYW5zW2ldKTsKCX0KfQ==