Cod sursa(job #2098928)

Utilizator MihneaGhiraMihnea MihneaGhira Data 3 ianuarie 2018 18:51:24
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include<fstream>
#include<algorithm>
using namespace std;
ifstream fin("teams.in");
ofstream fout("teams.out");
int n,a,b,s,f,mid,i1,i2,nr;
int v[100001];
int main(){
    fin>>n>>a>>b;
    for(int i=1;i<=n;i++)
        fin>>v[i];
    sort(v+1,v+n+1);
    for(int i=1;i<=n;i++){
        s=1;
        f=n;
        if(v[i]>b)
            break;
        while(s<=f){
            mid=s+(f-s)/2;
            if(v[mid]>=a-v[mid])
                f=mid-1;
            else
                s=mid+1;
        }
        i1=f+1;
        s=1;
        f=n;
        while(s<=f){
            mid=s+(f-s)/2;
            if(v[mid]<=b-v[i])
                s=mid+1;
            else
                f=mid-1;
        }
        i2=f;
        nr+=i2-i1+1;
        if(i>=i1&&i<=i2)
            nr--;
        if(v[i]+v[i1]==a)
            nr--;
        if(v[i]+v[i2]==a)
            nr--;
        while(v[i1+1]==v[i1]){
            i1++;
            nr--;
        }
        while(v[i2-1]==v[i2]){
            i2--;
            nr--;
        }
    }
    fout<<nr;
    return 0;
}