rt,不知道哪里打挂了
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define db double
const int N=1e5,T=5e4;
const db eps=1e-12;
int n;
struct line
{
db k,b;
bool Is;
}tr[T<<2];
int O(db x,db y)
{
if(x-y>eps)return 1;
if(x-y<-eps)return -1;
return 0;
}
db F(line a,int x){return a.k*x+a.b;}
void modify(int o,int l,int r,int ql,int qr,line k)
{
if(ql<=l&&r<=qr)
{
if(!tr[o].Is)tr[o]=k,tr[o].Is=1;
else if( O(F(k,l),F(tr[o],l))==1 && O(F(k,r),F(tr[o],r))==1)tr[o]=k;
else if( !(O(F(k,l),F(tr[o],l))==-1 && O(F(k,r),F(tr[o],r))==-1) )
{
int mid=(l+r)/2;
if(O(F(k,mid),F(tr[o],mid))==1)swap(k,tr[o]);
if(O(abs(F(k,l)-F(tr[o],l)),abs(F(k,r)-F(tr[o],r)))==-1)modify(o<<1,l,mid,ql,qr,k);
else modify(o<<1|1,mid+1,r,ql,qr,k);
}
}
else
{
int mid=(l+r)/2;
if(ql<=mid)modify(o<<1,l,mid,ql,qr,k);
if(mid<qr)modify(o<<1|1,mid+1,r,ql,qr,k);
}
}
db query(int o,int l,int r,int x)
{
if(l==r)
{
if(tr[o].Is)return F(tr[o],x);
return 0;
}
else
{
int mid=(l+r)/2;db ans=0;
if(tr[o].Is)ans=F(tr[o],x);
if(x<=mid)return max(ans,query(o<<1,l,mid,x));
else return max(ans,query(o<<1|1,mid+1,r,x));
}
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++) {
string op;cin>>op;
if (op=="Project") {
double s, p;
scanf("%lf%lf",&s,&p);
line now;now.k=p;now.b=s;
modify(1,1,T,1,T,now);
}
else {
int x;
scanf("%d",&x);
printf("%d\n",int(query(1,1,T,x)/100));
}
}
return 0;
}