Cod sursa(job #1981636)

Utilizator georgerapeanuRapeanu George georgerapeanu Data 16 mai 2017 12:26:38
Problema Gropi Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <cstdio>
#include <algorithm>
#define x first
#define y second
using namespace std;
FILE *f=fopen("gropi.in","r");
FILE *g=fopen("gropi.out","w");
pair<int,int> V[100005];
int C,N,M;
int len=0;
int X,Y,XX,YY;
int S[100005];
bool cmp(pair<int,int> a,pair<int,int> b)
{
    return a.y<b.y;
}
int bs(int Y,bool K)
{
    int st=1,dr=N;
    while(st<=dr)
    {
        int mid=(st+dr)/2;
        if(V[mid].y==Y)return mid;
        if(V[mid].y<Y)st=mid+1;
        else dr=mid-1;
    }
    if(K) return dr;
    return st;
}
int main()
{
    fscanf(f,"%d %d",&C,&N);
    for(int i=1;i<=N;i++)
    {
        fscanf(f,"%d %d",&V[i].x,&V[i].y);
    }
    sort(V+1,V+1+N,cmp);
    for(int i=1;i<=N;i++)
        S[i]=S[i-1]+(V[i-1].x!=V[i].x);
    fscanf(f,"%d",&M);
    while(M--)
    {
        fscanf(f,"%d%d%d%d",&X,&Y,&XX,&YY);
        if(Y>YY)
        {
            swap(X,XX);
            swap(Y,YY);
        }
        int ind1=bs(Y,0);
        int ind2=bs(YY,1);
        if(ind1>N||ind2<1)
        {
            fprintf(g,"%d\n",YY-Y+1+(X!=XX));
        }
        else
            fprintf(g,"%d\n",YY-Y+1+S[ind2]-S[ind1]+(V[ind1].x==X)+(V[ind2].x==XX));
    }
    fclose(f);
    fclose(g);
    return 0;
}