Pagini recente » Cod sursa (job #1220134) | Cod sursa (job #1170974) | Cod sursa (job #54987) | Cod sursa (job #345058) | Cod sursa (job #1938261)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream si("gropi.in");
ofstream so("gropi.out");
int in[100005][4];
int cont;
pair<int,int>g[100005];
int cbin(int x)
{
int st=1,dr=cont,mij,sol=-1;
while(st<=dr)
{
mij=(st+dr)/2;
if(in[mij][1]<=x&&in[mij][2]>=x)
return mij;
else
if(in[mij][1]>=x)
dr=mij-1;
else
st=mij+1;
}
}
int main()
{
int c,n;
si>>c>>n;
for(int i=1;i<=n;++i)
si>>g[i].second>>g[i].first;
sort(g+1,g+n+1);
in[++cont][0]=3-g[1].second;
in[cont][1]=0;
in[cont][2]=g[1].first-1;
in[cont][3]=0;
for(int i=2;i<=n;++i)
{
if(g[i].second!=g[i-1].second)
{
in[++cont][0]=g[i-1].second;
in[cont][1]=in[cont-1][2]+1;
in[cont][2]=g[i].first-1;
in[cont][3]=i-1;
}
}
in[++cont][0]=g[n].second;
in[cont][1]=in[cont-1][2]+1;
in[cont][2]=c;
in[cont][3]=n;
in[++cont][0]=3-g[n].second;
in[cont][1]=in[cont-1][2]+1;
in[cont][2]=c+5;
in[cont][3]=n;
/*
for(int i=1;i<cont;++i)
{
cout<<in[i][0]<<' '<<in[i][1]<<' '<<in[i][2]<<' '<<in[i][3]<<'\n';
}
//*/
int m;
si>>m;
int sum,g1,g2,a,b,d;
for(int i=1;i<=m;++i)
{
si>>b>>a>>d>>c;
if(a>c)
{
g1=a;
g2=b;
a=c;
c=g1;
b=d;
d=g2;
}
g1=cbin(a);
g2=cbin(c);
sum=c-a+1;
//cout<<g1<<' '<<g2<<'\n';
//cout<<b<<' '<<in[g1][0]<<'\n';
//cout<<sum<<' ';
if(a>g[in[g1][3]].first)
{
if(b==in[g1][0])
--sum;
}
else
if(b==in[g1][0])
++sum;
//cout<<sum<<' ';
if(d==in[g2][0])
{
++sum;
}
//cout<<sum<<' ';
sum+=g2-g1;
so<<sum<<'\n';
}
return 0;
}