#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究竟是哪里有问题呢