Cod sursa(job #927162)

Utilizator memaxMaxim Smith memax Data 25 martie 2013 17:10:55
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.41 kb
#include<iostream>
#include<fstream>
using namespace std;

struct cell{
       int x, a, b;
       };

int bins(cell v[], int n, int s);

int main(){
    int n,k=0;
    ifstream cinr("cautbin.in");
    cinr >> n;
    cell vec[n+1]; vec[0].x=-1;
    for(int i=1; i<=n; i++){
            int y; cinr >> y;
            if(y==vec[k].x) vec[k].b++;
            else {
                 k++;
                 vec[k].x=y;
                 vec[k].a=i;
                 vec[k].b=i;
                 }
            }
    ofstream cour("cautbin.out");
    int m; cinr >> m;       
    for(int i=1; i<=m; i++){
            int p,x,y; cinr >> y >> x;
            p=bins(vec,k,x);
            if(y==0){
                     if(vec[p].x!=x) cour << "-1";
                     else cour << vec[p].b;
                     }
            if(y==1){
                     if(vec[p].x>x) p--;
                     cour << vec[p].b;
                     }
            if(y==2){
                     if(vec[p].x<x) p--;
                     cour << vec[p].a;
                     }
            cour << "\n";
            }
    }
    
int bins(cell v[], int n, int s){
    int fir=1, las=n;
    while(fir!=las){
                    int p=(fir+las)/2;
                    if(v[p].x==s) return(p);
                    if(v[p].x>s) las=p-1;
                    else fir=p+1;
                    }
    return(fir);
    }