NCPC-1

#include <iostream>
#include <cstdio>

#define ul unsigned long long

using namespace std;

ul twosPower[60];

ul binSearch(int Left)
{
	int lw=0,hi=55;
	int mid;
	while(hi-lw>0)
	{
		mid = (lw+hi)/2;
		if(Left<twosPower[mid])
		{
			hi=mid;
		}
		else if(Left>=twosPower[mid])
		{
			lw=mid+1;
		}
	}
	return twosPower[lw-1];
}
int recursion(ul Left,ul Right)
{
	//<<"inside recur "<<Left<<" "<<Right<<endl;
	ul LeftNumberFloor;
	if(Left==0)
	return 0;
	else if(Left==Right)
	return Left;
	else if(Left==1 && Right==2)
	return 0;
	else
	{
		LeftNumberFloor = binSearch(Left);
		if(Right>LeftNumberFloor && Right<(2*LeftNumberFloor))//they are in the same base
		{
			return LeftNumberFloor + recursion(Left-LeftNumberFloor,Right-LeftNumberFloor);
		}
		else if(Right==LeftNumberFloor)
			return LeftNumberFloor+0;
		else
			return 0;
	}
	return 0;
}
int main()
{
	int t;
	ul lt,rt;
	twosPower[0]=1;
	twosPower[1]=2;
	for(int i=2;i<60;i++)
	twosPower[i]=twosPower[i-1]*2;
	cin>>t;
	while(t--)
	{
		cin>>lt>>rt;
		cout<<recursion(lt,rt)<<endl;
	}
	return 0;
}

 

#include <iostream>
#include <cstdio>

#define ul unsigned long long

using namespace std;

ul twosPower[60];

ul binSearch(int Left)
{
	int lw=0,hi=55;
	int mid;
	while(hi-lw>0)
	{
		mid = (lw+hi)/2;
		if(Left<twosPower[mid])
		{
			hi=mid;
		}
		else if(Left>=twosPower[mid])
		{
			lw=mid+1;
		}
	}
	return twosPower[lw-1];
}
int recursion(ul Left,ul Right)
{
	//<<"inside recur "<<Left<<" "<<Right<<endl;
	ul LeftNumberFloor;
	if(Left==0)
	return 0;
	else if(Left==Right)
	return Left;
	else if(Left==1 && Right==2)
	return 0;
	else
	{
		LeftNumberFloor = binSearch(Left);
		if(Right>LeftNumberFloor && Right<(2*LeftNumberFloor))//they are in the same base
		{
			return LeftNumberFloor + recursion(Left-LeftNumberFloor,Right-LeftNumberFloor);
		}
		else if(Right==LeftNumberFloor)
			return LeftNumberFloor+0;
		else
			return 0;
	}
	return 0;
}
int main()
{
	int t;
	ul lt,rt;
	twosPower[0]=1;
	twosPower[1]=2;
	for(int i=2;i<60;i++)
	twosPower[i]=twosPower[i-1]*2;
	cin>>t;
	while(t--)
	{
		cin>>lt>>rt;
		cout<<recursion(lt,rt)<<endl;
	}
	return 0;
}

 

Leave a Reply

Your email address will not be published. Required fields are marked *