Pagini recente » Cod sursa (job #1393197) | Cod sursa (job #486791) | Cod sursa (job #3142025) | Cod sursa (job #3260567) | Cod sursa (job #197690)
Cod sursa(job #197690)
#include<fstream>
using namespace std;
fstream in,out;
long c,n,m,aux;
long sm,i,j,k;
long x1,y1,x2,y2;
long p1,p2;
long x,y;
long s[2][100000];
long v[200000];
int divide(long p,long q)
{
long st=p,dr=q,x=s[1][p],y=s[0][p];
while(st<dr)
{
while(st<dr&&s[1][dr]>=x) dr--;
s[0][st]=s[0][dr];
s[1][st]=s[1][dr];
while(st<dr&&s[1][st]<=x) st++;
s[0][dr]=s[0][st];
s[1][dr]=s[1][st];
}
s[1][st]=x;
s[0][st]=y;
return st;
}
void qsort(long p,long q)
{
long m=divide(p,q);
if(m-1>p) qsort(p,m-1);
if(m+1<q) qsort(m+1,q);
}
/*long caut_binar(long y, long &p)
{
s[0][0]=0; s[1][0]=0;
s[0][n+1]=0; s[1][n+1]=c+1;
long l,h,r;
l=0;h=n+1;r=-1;
while ((l<=h)&&(r==-1))
{
m=(l+h)/2;
if (s[1][m]==y)r=m;
if (s[1][m]<y)l=m+1;
if (s[1][m]>y)h=m-1;
}
if (r>-1) return 1+s[0][r];
else return s[0][l];
} */
int main()
{
in.open("gropi.in",ios::in);
out.open("gropi.out",ios::out);
in>>c>>n;
for(i=1;i<=n;i++)
in>>s[0][i]>>s[1][i];
qsort(1,n);
for(j=i=1;i<=c;i++)
{
if(s[1][j]==i && s[0][j]!=s[0][j-1]) v[i]=v[i-1]+1;
else v[i]=v[i-1];
if(i>=s[1][j]) j++;
}
in>>m;
for(i=1;i<=m;i++)
{
in>>p1>>x>>p2>>y;
if(x>y) { aux=x; x=y; y=aux; }
sm=v[y]-v[x];
if(p1==p2 && sm!=0 && sm%2!=0)
sm=sm+1+y-x+1;
else sm=sm+y-x+1;
out<<sm<<"\n";
}
/*b[1]=0;
for (i=2;i<=n;i++)
if (s[0][i-1]==s[0][i]) b[i]=b[i-1]+s[1][i]-s[1][i-1];
else b[i]=b[i-1]+s[1][i]-s[1][i-1] + 1;
in>>m;
for (i=1;i<=m;i++)
{
in>>x1>>y1>>x2>>y2;
caut_binar(y1,p1);//prima groapa care urmeaza pozitiei (x1,y1) este (a[0][p1],a[1][p1]) cu a[1][p1]>y1
caut_binar(y2,p2);//ultima groapa care precede pozitia (x2,y2) este (a[0][p2],a[1][p2]) cu a[1][p2]<y2
sm=p1+1-y1+b[p2]-b[p1]+p2-y2;
out<<sm<<endl;
}*/
in.close();
out.close();
return 0;
}