摘要:
找i节点的第k个父亲 int father(int i,int k) { for(int x=0;x<=int(log2(k));x++) if((1<<x)&k) //(1<<x)&k可以判断k的二进制表示中,第(x-1)位上是否为1 i=fa[i][x]; //把i往上提 return i; } 阅读全文
摘要:
本质是带优化的双指针,对全部区间进行√n个块的分块操作,然后进行排序。第一关键字为查询的左端点块号,第二关键字为查询的右端点本身的位置。 这里放一个洛谷例题 P3901 数列找不同 附上代码 #pragma GCC optimize("O3") #include <bits/stdc++.h> #d 阅读全文
摘要:
void rmq_init() { for(int i=1;i<=N;i++) dp[i][0]=arr[i];//初始化 for(int j=1;(1<<j)<=N;j++) for(int i=1;i+(1<<j)-1<=N;i++) dp[i][j]=min(dp[i][j-1],dp[i+( 阅读全文