摘要:
#define LL(x) ((x)<<1)#define RR(x) ((x)<<1|1)#define FF(i,n) for(int i = 0 ; i < n ; i ++) 1 struct Seg_Tree{ 2 int left,right,num; 3 int calmid() { 4 return (left+right)/2; 5 } 6 }tt[150000]; 7 int num[50001]; 8 int build(int left,int right,int idx) { 9 tt[idx].left = lef... 阅读全文
摘要:
以实现函数printf的一个最简单版本为例,介绍如何以可移植的方式编写可处理变长参数表的函数。因为我们的重点在于参数的处理,所以,函数minprintf只处理格式字符串和参数,格式转换则通过调用函数printf实现。 函数printf的正确声明形式为:int printf(char* fmt, ...) 其中,省略号表示参数表中参数的数量和类型是可变的。省略号只能出现在参数表的尾部。因为minprintf函数不需要想printf函数一样返回实际输出的字符数,因此,我们将它声明为下列形式:void minprintf(char* fmt, ...) 编写函数minprintf的关键在于如何处理一 阅读全文
摘要:
对于二进制表示的float类型的2.5,其在内存中的表示为01000000 00100000 00000000 00000000,如果我们想打印出它在内存中是如何表示的,那么我们可以用1进行移位,与每个比特进行与运算,还是看看代码吧:对于输入参数,在visual studio下可以点击项目->属性->配置属性->调试->命令参数进行输入,在visual c++6.0可以点击工程->设置->调试->程序变量里输入。输入2.5打印看看,其结果与我们预期相同。#include <cstdlib> #include <iostream> 阅读全文
摘要:
在《编程珠玑》一书上,有一题是将一堆不重复的数进行排序,这些数的值大小位于[0, 10000000).然后作者在书后给出的答案确实很精辟,利用位排序将这个问题轻而易举的解决了。首先弄懂i>>SHIFT相当于i/32,i&MASK相当于i%32.题目中说了Replace above 2 lines w... 阅读全文
摘要:
线段树在一些acm题目中经常见到,这种数据结构主要应用在计算几何和地理信息系统中。下图就为一个线段树:(PS:可能你见过线段树的不同表示方式,但是都大同小异,根据自己的需要来建就行。)1.线段树基本性质和操作线段树是一棵二叉树,记为T(a, b),参数a,b表示区间[a,b],其中b-a称为区间的长度,记为L。线段树T(a,b)也可递归定义为:若L>1 : [a, (a+b) div 2]为 T的左儿子; [(a+b) div 2,b]为T 的右儿子。 若L=1 : T为叶子节点。线段树中的结点一般采取如下数据结构:struct Node{ int left... 阅读全文
摘要:
1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #define N 100 5 6 typedef char datatype; 7 void visit(datatype data); 8 9 typedef struct bnode 10 { 11 datatype data; 12 struct bnode *lchild, *rchild; 13 } BTNode, *BTree, **B_BTree; 14 15 typedef struct stack 1... 阅读全文
摘要:
不知怎么的今晚怎么也睡不着觉,自己想得太多了。快大三了,感觉自己什么也没有学到,很空虚。原想在这个暑假里好好充实自己,却不料自己大部分时间都浪费掉了~~~ 阅读全文