所有测试点全部 RE
#include<bits/stdc++.h>
#define ull unsigned long long
#define ll long long
using namespace std;
const double eps=1e-8;
const int maxn=100005;
const int maxm=50005;
int s[maxn];
int n;
int cnt;
struct line{
double k;
double b;
}p[maxn];
int cmp(double x,double y){
if(x-y>eps) return 1;
if(y-x>eps) return -1;
return 0;
}
double calc(int x,int d){
return p[x].k*d+p[x].b;
}
void update_tree(int x,int l,int r,int u){
int &v=s[x];
int mid=(l+r)>>1;
int bmid=cmp(calc(u,mid),calc(v,mid));
int left_x=2*x;
int right_x=2*x+1;
if(bmid==1||(!bmid&&u<v)) swap(u,v);
int bl=cmp(calc(u,l),calc(v,l));
int br=cmp(calc(u,r),calc(v,r));
if(bl==1||(!bl&&u<v)) update_tree(left_x,l,mid,u);
if(br==1||(!br&&u<v)) update_tree(right_x,mid+1,r,u);
}
double query_tree(int x,int l,int r,int p){
double tot=calc(s[x],p);
if(l==r) return tot;
int mid=(l+r)>>1;
int left_x=2*x;
int right_x=2*x+1;
if(p<=mid) return max(tot,query_tree(left_x,l,mid,p));
return max(tot,query_tree(right_x,mid+1,r,p));
}
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL),cout.tie(NULL);
p[0]={0,0};
update_tree(1,0,maxm-5,0);
cin>>n;
while(n--){
string opt;
cin>>opt;
if(opt=="Project"){
double k,b;
cin>>b>>k;
b-=k;
p[++cnt]={k,b};
update_tree(1,0,maxm-5,cnt);
}
else if(opt=="Query"){
int x;
int ans;
cin>>x;
ans=(int)(query_tree(1,0,maxm-5,x)*1.0/100);
cout<<ans<<"\n";
}
}
return 0;
}
query_tree函数中极有可能有错误(尤其是最后两行),其余错误未知
救救孩子吧,我只是个新六年级的蒟蒻