Pagini recente » Cod sursa (job #2783652) | Cod sursa (job #1660189) | Cod sursa (job #2225314) | Cod sursa (job #2159664) | Cod sursa (job #2764940)
#include<fstream>
#include<algorithm>
using namespace std;
long long int v[100000],s[100000]={};
//grupuri
int main(){
ifstream in("grupuri.in");
ofstream out("grupuri.out");
long long int k,n,minim,l=1,mijloc;
in>>k>>n;
while(l*2<=n){
l*=2;
}
for(long long int i=1;i<=n;i++){
in>>v[i];
}
s[0]=0;
for(long long int i=1;i<=n;i++){
s[i]=s[i-1]+v[i];
}
minim=v[1];
long long int maxim=s[n]/n;
while(minim<=maxim){
mijloc=(minim+maxim)/2;
long long int r=0;
for(long long int i=l;i>=1;i/=2){
if(v[r+i]<=mijloc && r+i<=n){
r+=i;
}
}
long long int b=s[n]-s[r-1]-(n-r+1)*mijloc,a=s[r-1]-mijloc*(k-n+r-1);
if(a<0){
maxim=mijloc;
}else{
if(b<k){
minim=mijloc;
}else{
break;
}
}
}
out<<mijloc;
}