李超线段树
蒟蒻又双叒叕调不出来了,求助QwQ
//starusc
#include<bits/stdc++.h>
using namespace std;
inline int read(){
int x=0,f=1;char c=getchar();
while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}
while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=getchar();}
return f==1?x:-x;
}
const int N=1e5+4;
#define lc (p<<1)
#define rc (p<<1|1)
int tfl[N<<2];
double tk[N<<2],tb[N<<2];
void modify(int p,int l,int r,double k,double b){
if(!tfl[p]){tk[p]=k;tb[p]=b;tfl[p]=1;return;}
double fpl=tk[p]*l+tb[p],fpr=tk[p]*r+tb[p];
double fnl=k*l+b,fnr=k*r+b;
if(fnl>=fpl&&fnr>=fpr){tk[p]=k;tb[p]=b;return;}
if(fnl<=fpl&&fnr<=fpr)return;
if(l==r)return;
int mid=l+r>>1;
if(fnl<fpl){
if(tk[p]*mid+tb[p]<k*mid+b){
modify(lc,l,mid,tk[p],tb[p]);
tk[p]=k;tb[p]=b;
}
else modify(rc,mid+1,r,k,b);
}
else{
if(tk[p]*mid+tb[p]<k*mid+b){
modify(rc,mid+1,r,tk[p],tb[p]);
tk[p]=k;tb[p]=b;
}
else modify(lc,l,mid,k,b);
}
}
double query(int p,int l,int r,int x){
if(!tfl[p])return 0;
if(l==r)return tk[p]*x+tb[p];
int mid=l+r>>1;
if(x<=mid)return max(tk[p]*x+tb[p],query(lc,l,mid,x));
else return max(tk[p]*x+tb[p],query(rc,mid+1,r,x));
}
char chh[20];
int main(){
int n=read(),x;
double s,p;
for(int i=1;i<=n;i++){
scanf("%s",chh);
if(chh[0]=='P'){
scanf("%lf%lf",&s,&p);
s-=p;
modify(1,1,n,p,s);
}
else{
x=read();
cout<<(long long)(query(1,1,n,x)/100)<<"\n";
}
}
return (0-0);
}