摘要: 很裸的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 阅读全文
posted @ 2013-05-29 20:28 小仪在努力~ 阅读(133) 评论(0) 推荐(0) 编辑
摘要: 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;++ 阅读全文
posted @ 2013-05-29 13:38 小仪在努力~ 阅读(193) 评论(0) 推荐(0) 编辑
摘要: 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 阅读全文
posted @ 2013-05-29 11:59 小仪在努力~ 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 很裸很水的树状数组#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 阅读全文
posted @ 2013-05-29 10:56 小仪在努力~ 阅读(201) 评论(0) 推荐(0) 编辑