Pagini recente » Istoria paginii utilizator/susneamaria | Cod sursa (job #1981876) | Istoria paginii utilizator/cristiana_valeca | Istoria paginii runda/cex_9/clasament | Cod sursa (job #204479)
Cod sursa(job #204479)
#include<stdio.h>
#define N 200001
#define VERT 1<<29
long t,o,v,n,i,cnt;
long long a[N],aa,bb,vert,bc,bn,ma;
void readd(),solve(),hd(long ic,long nc),sh(long i1,long i2);
int main()
{
readd();
for(;t;t--)solve();
return 0;
}
void readd()
{
freopen("hvrays.in","rt",stdin);
freopen("hvrays.out","wt",stdout);
scanf("%ld",&t);vert=(1<<27);ma=(1<<26)-1;
}
void solve()
{ scanf("%ld%ld",&o,&v);n=0;
for(i=1;i<=o;i++){scanf("%lld%lld",&aa,&bb);a[++n]=(bb<<30);a[n]|=aa;}
for(i=1;i<=v;i++){scanf("%lld%lld",&aa,&bb);a[++n]=(bb<<30);a[n]|=aa;a[n]|=vert;}
for(i=n/2;i;i--)hd(i,n);
for(i=n;i;i--){sh(1,i);hd(1,i-1);}
bc=bn=-1;cnt=0;
for(i=1;i<=n;i++)
{ if(a[i]&vert){bn=((a[i]&ma)>bn)?(a[i]&ma):bn;}
else if((a[i]&ma)>bc){cnt++;bc=bn;}
}
printf("%ld\n",cnt);
}
void hd(long ic,long nc)
{
long is=ic<<1;
if(is>nc)return;
if(is<nc)if(a[is]<a[is+1])is++;
if(a[ic]<a[is]){sh(is,ic);hd(is,nc);}
}
void sh(long i1,long i2)
{ long long aux=a[i1];a[i1]=a[i2];a[i2]=aux;
}