摘要:
很裸的RMQ~#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include<string>#include<queue>using namespace std;#define MAXN 50005int maxsum[MAXN][20],minsum[MAXN][20],n,q;void RMQ(){ for(int j=1;(1<<j)<=n;++j) for(int 阅读全文
摘要:
RMQ问题:用典型的ST算法可过。#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include<string>#include<queue>using namespace std;#define MAXN 100010 int maxsum[MAXN][18],minsum[MAXN][18],n;void RMQ(){ for(int j=1;(1<<j)<=n;++ 阅读全文
摘要:
RMQ:范围最小值问题。给出一个n个元素的数组A1,A2,...,An,设计一个数据结构支持查询操作Query(L,R):计算min{AL,AL+1,...,AR}。每次用一个循环来求最小值显然不够快快,前缀和的思想也不能提高效率,这时候ST算法就派上用场了,它预处理的时间是O(nlogn),但是查询只需要Q(1),而且常数很小。令dp[i][j]表示从i开始的,长度为2^j的一段元素中的最小值,递推公式:dp[i][j]=min{dp[i][j-1],dp[i+2^(j-1)][j-1]}模板:(^ ^一次预处理,一辈子不用担忧)void RMQ_init(const vector<i 阅读全文
摘要:
很裸很水的树状数组#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include<string>#include<queue>using namespace std;#define N 1000005int c[N],n,m;int sum(int x){ int ret=0; while(x) { ret+=c[x]; x-=x&-x; } return ret;}void ad 阅读全文