https://blog.csdn.net/lixuanjing2016/article/details/90756240
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string>
#include <cmath>
using namespace std;
int n;
struct node
{
long long v,mk;
friend bool operator<(node a,node b)
{
return a.mk<b.mk;
}
}itm[300005];
int main() {
while(~scanf("%d",&n))
{
long long ts=0;
for(int i=0;i<n;i++)
scanf("%lld%lld",&itm[i].v,&itm[i].mk),ts+=itm[i].v;
sort(itm,itm+n);
long long sum=0,fac=1;
int sta=0;
long long s=0;
for(int i=0;i<=61;i++)
{
fac*=2;sum=0;
while(sta<n && itm[sta].mk<fac)
{
sum+=itm[sta].v;
sta++;
}
if((sum>0 && ts>0) || (sum<0 && ts<0))
{
s+=(1ll<<i);
for(int j=sta;j<n;j++)
{
if((itm[j].mk&(1ll<<i))!=0)
itm[j].v*=-1;
}
}
}
printf("%lld\n",s);
}
return 0;
}