Pagini recente » Cod sursa (job #2987411) | Utilizatori inregistrati la ONIS 2014, Runda 4 | Cod sursa (job #896612) | Cod sursa (job #1406560) | Cod sursa (job #1622112)
#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);
}