一、 背景
写代码的时候,总有一个经典问题:代码运行效率和简洁性常常不可兼得。换句话说,为了能够快速组织一些高级数据结构,我们可能需要使用stl,从而导致效率下降。人们往往使用一个绝招——牺牲空间来换取效率。所以有以下几个事实:
二、已知耗费时间的事实及解决方案
· 重新分配空间并迁移数据——根据题意计算空间量,提前分配足够空间
· 进行浮点运算后取整——使用递推预处理
· 进行乘法运算——位运算优化
·进行%运算——long long自动溢出
2.1 解决思想
使用全局数组建立索引数组
信息全部压入索引数组,记录整理信息所在处的下标
三、低级数据结构
3.1 链表
3.1.1 简易型——stl
#include <list>
using namespace std;
list<int> a;
3.1.2 快速型——索引数组
#define MAX_SIZE 1005
struct node
{
int val;
int next;
} a[MAX_SIZE];
int cnt;
void insert(int x, int p = 1)
{
int now = 0;
while (--p)
now = a[now].next;
a[++cnt] = {x, a[now].next};
a[now].next = cnt;
}
3.2 二叉树
3.1.2 快速型——索引数组
#define MAX_SIZE 1005
struct node
{
int val;
int l, r;
} a[MAX_SIZE];
int cnt;
待更新。。。