/ Randle /

记录详情

Wrong Answer

/in/foo.cc: In function 'int lowerbound(int)':
/in/foo.cc:24:12: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   int mid=l+r>>1;
           ~^~
# 状态 耗时 内存占用
#1 Wrong Answer 1ms 192.0 KiB
#2 Wrong Answer 1ms 212.0 KiB
#3 Wrong Answer 1ms 200.0 KiB
#4 Accepted 1ms 204.0 KiB
#5 Accepted 1ms 200.0 KiB
#6 Accepted 1ms 212.0 KiB
#7 Accepted 3ms 204.0 KiB
#8 Accepted 3ms 208.0 KiB
#9 Accepted 3ms 196.0 KiB
#10 Accepted 3ms 200.0 KiB

代码

#include<bits/stdc++.h>
inline void read(int &a)
{
	a=0;char c=getchar();
	while(c<'0'||c>'9')c=getchar();
	while(c>='0'&&c<='9')
	{
		a=(a<<1)+(a<<3)+c-'0';
		c=getchar();
	}
}
inline void write(int a)
{
	if(a<0){putchar('-');a=-a;}
	if(a>9)write(a/10);
	putchar(a%10+'0');
}
int deep[39];
inline int lowerbound(int x)
{
	int l=0,r=30;
	while(l!=r)
	{
		int mid=l+r>>1;
		if(deep[mid]>=x)r=mid;
		else l=mid+1;
	}
	if(deep[l]==x)return l;
	else return l-1;
}
inline int lca(int x,int y)
{
	int k=0,deepx=std::lower_bound(deep, deep + 30, x)-deep,deepy=std::lower_bound(deep, deep + 30, y)-deep;
	if(deepx<deepy){std::swap(x,y);std::swap(deepx,deepy);}
	for(int i=1;i<=deepx-deepy;i++)x>>=1;
	if(x==y)return deepx-deepy;
	while(x!=y){k++;x>>=1;y>>=1;}
	return (k<<1)+abs(deepy-deepx);
}
int main()
{
	int a=1,n;
	for(int i=0;i<=30;i++)
	{
		deep[i]=a;
		a<<=1;
	}
	read(n);int x,y;
	while(n--)
	{
		read(x);read(y);
		write(lca(x,y));printf("\n");
	}
	return 0;
}

信息

递交者
类型
递交
题目
三向城T1
题目数据
下载
语言
C++
递交时间
2019-10-11 09:59:05
评测时间
2019-10-11 09:59:05
评测机
分数
70
总耗时
22ms
峰值内存
212.0 KiB