Cod sursa(job #1622112)

Utilizator AnaRaduAna-Maria Radu AnaRadu Data 1 martie 2016 07:28:45
Problema Gropi Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.55 kb
#include <stdio.h>
#include <algorithm>
#define lim 100005
using namespace std;
int mat[2][lim];
int cautbin(int x,int y){
    int l1,l2,mij,rasp;
    l1=1;
    l2=mat[x][0];
    while(l1<=l2){
        mij=(l1+l2)/2;
        if(mat[x][mij]<y)
            l1=mij+1;
        else{
            rasp=mat[x][mij];
            l2=mij-1;
        }
    }
    return rasp;
}
int main(){
    FILE *fin,*fout;
    fin=fopen("gropi.in","r");
    fout=fopen("gropi.out","w");
    int i,n,m,p,niv,col,aux,rasp,x,y;
    fscanf(fin,"%d%d",&n,&m);
    for(i=1;i<=m;i++){
        fscanf(fin,"%d%d",&niv,&col);
        mat[niv-1][0]++;
        mat[niv-1][mat[niv-1][0]]=col;
    }
    niv=0;
    mat[0][0]++;
    mat[niv][mat[0][0]]=n+1;
    mat[1][0]++;
    mat[1][mat[1][0]]=n+1;
    sort(mat[0]+1,mat[0]+mat[0][0]+1);
    sort(mat[1]+1,mat[1]+mat[1][0]+1);
    fscanf(fin,"%d",&p);
    for(i=1;i<=p;i++){
        rasp=0;
        fscanf(fin,"%d%d%d%d",&niv,&col,&x,&y);
        niv--;
        x--;
        if(col>y){
            aux=col;
            col=y;
            y=aux;
            aux=niv;
            niv=x;
            x=aux;
        }
        rasp-=col;
        col=cautbin(niv,col)-1;
        rasp+=col;
        while(col<y){
            niv=!niv;
            rasp-=col;
            col=cautbin(niv,col)-1;
            rasp+=col;
            rasp++;
        }
        rasp=rasp-col+y;
        if(niv!=x)
            rasp++;
        fprintf(fout,"%d\n",rasp+1);
    }
    fclose(fin);
    fclose(fout);
    return(0);
}