Cod sursa(job #1248197)

Utilizator DjokValeriu Motroi Djok Data 24 octombrie 2014 19:25:49
Problema Semne Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include<fstream>
#include<algorithm>
using namespace std;

int a[50005],n,i,st,dr,omg;
long long rs,k;

long long check(int x) {
  int i;
  long long aux=0;
  //dap faci simplu (c) ION :)
  for(i=1,omg=n;2*a[i]<=x && i<=n;++i)
  {
    while(i<omg && a[i]+a[omg]>x) --omg;
    aux+=2*(omg-i)+1;
  }

 return aux;
}

int main()
{
  ifstream cin("sume2.in");
  ofstream cout("sume2.out");

  cin>>n>>k;
  for(i=1;i<=n;++i) cin>>a[i];
  sort(a+1,a+n+1);

  st=2*a[1]; dr=2*a[n];
  while(st<=dr)
  {
    int pivot=(st+dr)/2;
    long long gmb=check(pivot);
    long long fnc=check(pivot-1);
    if(gmb>=k && fnc<k) rs=pivot,st=dr+1;
    else if(gmb<k) st=pivot+1;
         else dr=pivot-1;
  }

  cout<<rs<<'\n';

 return 0;
}