#define LOG2_8BIT(v) (8 - 90/(((v)/4+14)|1) - 2/((v)/2+1)) #define LOG2_16BIT(v) (8*((v)>255) + LOG2_8BIT((v) >>8*((v)>255))) #define LOG2_32BIT(v) (16*((v)>65535L) + LOG2_16BIT((v)*1L >>16*((v)>65535L))) #define LOG2_64BIT(v) \ (*…
#include<stdio.h>int main(){int num,count=0,i=0,ret=0;scanf("%d",&num);count=num;while(num>1){ num/=2; ret++;}printf("log2 of %d = %d\n",count,ret); return 0;}/*64log2 of 64 = 6Press any key to continue*///注意:在两个数做运算时,只要有一…
传送门 题意: 给出一个数x,有两个操作: ①:x ^= 2k-1; ②:x++; 每次操作都是从①开始,紧接着是② ①②操作循环进行,问经过多少步操作后,x可以变为2p-1的格式? 最多操作40次,输出操作数和所有操作中步骤①的操作数的k: 我的思路: 操作①每次都是异或 (k-1) 个1: 我们最终的结果是将 x 变为(p-1)个1: 那么,我们只要每次异或操作都将x中最高的0位变为1: 因为x最多只有20位,所以,完全可以在40个操作内将x变为(p-1)个1: 例如: 7654321(位置…
请先于浮点数的文章:http://blog.jobbole.com/86371/ 先贴一张关于float和double的图: float: double: 快速log2长这样: int flog2(float x) { &)-; } 由于float是这样储存数的:一个字节的符号位,8个字节的指数,还有23个字节的基数.指数以127为偏移量,以2为基.基数以2进制表示.一个float就是: 符号*2指数-127*(1+基数*2-23) 因此,float能表示的范围是2-127到2127,但是只有l…
#1068 : RMQ-ST算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho在美国旅行了相当长的一段时间之后,终于准备要回国啦!而在回国之前,他们准备去超市采购一些当地特产——比如汉堡(大雾)之类的回国. 但等到了超市之后,小Hi和小Ho发现者超市拥有的商品种类实在太多了——他们实在看不过来了!于是小Hi决定向小Ho委派一个任务:假设整个货架上从左到右拜访了N种商品,并且依次标号为1到N,每次小Hi都给出一段区间[L, R],小Ho要做的是选出标…
网上一个能用的也没有,自己写一个把. 1.计算原理:  整数部分 网上找到了一个c语言的计算方法如下: int flog2(float x) { return ((unsigned&)x>>23&255)-127; } 用matlab测试了一下,得到的结果是一个log2的整数部分 小数部分 发现小数部分其实都是  1+一个小数  ,然后这个小数值其实可通过最高位是0.5 然后0.25,0.125.......这样累加得到. 比如: 100 0000 0000 0000 0000…
public class LoggerHelper2 { private static ConcurrentQueue<string> CqMsg = null; private static string logFilePath = @"D:\log\" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt"; static LoggerHelper2() { CqMsg = new Concu…
RMQ问题中有个ST算法,当然还有个标准算法.LCA问题可以转化为带限制的RMQ(RMQ+-1)问题来解决.我们姑且认为这些问题的时间复杂度是查询$O(1)$的.但是,注意到对于RMQ(/+-1)问题,这个问题有个长度的限制,我们记为n.那么对于每个查询,我们都要询问一个范围[L,R],1<=L<=R<=n.这个区间的长度为R-L+1.然后我们将原区间分成两个Sparse Table上的项,即长度为int_log2(R-L+1)-1的两个子区间求解min,即合并两个子区间的信息. 那么问…
RMQ 难度级别:B: 运行时间限制:1000ms: 运行空间限制:256000KB: 代码长度限制:2000000B 试题描述 长度为n的数列A,以及q个询问,每次询问一段区间的最小值. 输入 第一行,一个整数n 第二行,n个数,表示A数组,用空格隔开. 第三行,一个正整数q 第4到第q+3行每行两个正整数L.R(L<=R),表示一段区间,用一个空格隔开. 输出 针对每个询问,输出结果.每个结果占一行. 输入示例 5 3 2 4 3 5 3 1 3 2 5 3 4 输出示例 2 2 3 其他说…
2016-03-31 RMQ 难度级别:B: 运行时间限制:1000ms: 运行空间限制:256000KB: 代码长度限制:2000000B 试题描述 长度为n的数列A,以及q个询问,每次询问一段区间的最小值. 输入 第一行,一个整数n 第二行,n个数,表示A数组,用空格隔开. 第三行,一个正整数q 第4到第q+3行每行两个正整数L.R(L<=R),表示一段区间,用一个空格隔开. 输出 针对每个询问,输出结果.每个结果占一行. 输入示例 5 3 2 4 3 5 3 1 3 2 5 3 4 输出示…