0pts全部RE,求条
查看原帖
0pts全部RE,求条
1046844
Bob1101楼主2025/7/30 13:09

所有测试点全部 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;
}

RE 链接

query_tree函数中极有可能有错误(尤其是最后两行),其余错误未知

救救孩子吧,我只是个新六年级的蒟蒻

2025/7/30 13:09
加载中...