求助
查看原帖
求助
241838
microchip楼主2021/10/3 13:27
#include<bits/stdc++.h>
using namespace std;

struct xds{
	int left,right,v;
}T[4000050];

long long n,m,tree[1000050],l,r,mid;

long long x(long long i){
	return (i+abs(i))/2;
}

void build(int L,int R,int num){
	if(L==R){
		T[num].v=tree[L];
		return;
	}
	build(L,(L+R)/2,num*2);
	build((L+R)/2+1,R,num*2+1);
}

long long add(long long L,long long R,long long num){
	if(L==R){
		return x(T[num].v-mid);
	}return add(L,(L+R)/2,num*2)+add((L+R)/2+1,R,num*2+1);
}

int main()
{
	freopen("eko.txt","r",stdin);
	freopen("eko.out","w",stdout);
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>tree[i];
		r=max(r,tree[i]);
	}build(1,n,1);
	mid=(l+r)/2;
	while(l!=r){
		if(add(1,n,1)>m){
			l=mid+1;
			mid=(l+r)/2;
		}if(add(1,n,1)<m){
			r=mid;
			mid=(l+r)/2;
		}if(add(1,n,1)==m)break;
	}cout<<mid-1;
	return 0;
}

今天测试测了这道题,开始只有10分,后来拿数据对比一下,在最后输出那里加了个-1,结果就90分了(当时直接.....)

so究竟是哪里有问题呢

2021/10/3 13:27
加载中...