- 浏览: 120416 次
- 性别:
- 来自: 北京
最新评论
/* * Author: rush * Created Time: 2010年07月28日 星期三 09时29分05秒 * File Name: icpc/hdu3486.cpp */ #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <iostream> #include <algorithm> #include <vector> #include <map> #include <set> #define out(v) cout << #v << ": " << (v) << endl using namespace std; typedef long long LL; const int maxn = 200000 + 5; int n, k, a[maxn]; int rmax[20][maxn]; void make() { for (int j = 0; j < n; ++j) rmax[0][j] = a[j]; for (int i = 0; i + 1 < 20; ++i) for (int j = 0; j + (1 << i) < n; ++j) rmax[i + 1][j] = max(rmax[i][j], rmax[i][j + (1 << i)]); } // [begin, end) int query(int begin, int end) { int k = 0; while ((1 << (k + 1)) < end - begin) ++k; return max(rmax[k][begin], rmax[k][end - (1 << k)]); } int main() { while (scanf("%d%d", &n, &k) != EOF) { if (n < 0 && k < 0) break; for (int i = 0; i < n; ++i) scanf("%d", &a[i]); make(); int m, L, prev = -1, sum, i, j; for (m = 1; m <= n; ++m) { L = n / m; if (L != prev) sum = 0, i = 0, j = 0; while (i + L <= n && j < m) { sum += query(i, i + L); i += L; ++j; } prev = L; if (sum > k) break; } printf("%d\n", m <= n ? m : -1); } return 0; }
update 20101230:
二维RMQ
/* * Author: rush * Created Time: 2010年12月30日 星期四 15时59分14秒 * File Name: icpc/pku2019_2.cpp */ #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <iostream> #include <algorithm> #include <vector> #include <map> #include <set> #define out(v) cout << #v << ": " << (v) << endl #define FOR(i, n) for (int i = 0; i < n; ++i) #define two(x) (1 << x) #define min4(a, b, c, d) min(min(min(a, b), c), d) #define max4(a, b, c, d) max(max(max(a, b), c), d) using namespace std; typedef long long LL; int N, B, K; int mat[255][255]; int rmin[10][255][255], rmax[10][255][255]; void make() { FOR(i, N) FOR(j, N) rmin[0][i][j] = rmax[0][i][j] = mat[i][j]; for (int k = 0; k + 1 < 10; ++k) for (int i = 0; i + two(k) < N; ++i) for (int j = 0; j + two(k) < N; ++j) { rmin[k + 1][i][j] = min4(rmin[k][i][j], rmin[k][i][j + two(k)], rmin[k][i + two(k)][j], rmin[k][i + two(k)][j + two(k)]); rmax[k + 1][i][j] = max4(rmax[k][i][j], rmax[k][i][j + two(k)], rmax[k][i + two(k)][j], rmax[k][i + two(k)][j + two(k)]); } } int query(int x, int y) { int k = 0; while (two(k + 1) <= B) ++k; int tmin = min4(rmin[k][x][y], rmin[k][x][y + B - two(k)], rmin[k][x + B - two(k)][y], rmin[k][x + B - two(k)][y + B - two(k)]); int tmax = max4(rmax[k][x][y], rmax[k][x][y + B - two(k)], rmax[k][x + B - two(k)][y], rmax[k][x + B - two(k)][y + B - two(k)]); return tmax - tmin; } int main() { scanf("%d%d%d", &N, &B, &K); for (int i = 0; i < N; ++i) for (int j = 0; j < N; ++j) scanf("%d", &mat[i][j]); make(); while (K--) { int x, y; scanf("%d%d", &x, &y); --x, --y; printf("%d\n", query(x, y)); } return 0; }
发表评论
-
lower_bound and upper_bound
2012-02-09 00:36 1181/** * @brief Finds the ... -
HDU 3954
2012-02-05 10:43 863线段树变种,也是在2logn段上面做文章 /* * ... -
HDU 4027
2012-02-04 22:09 884线段树变种 在2logn段上面做文章,swap(x, y)太阴 ... -
ICPC编码建议
2011-10-28 09:52 937写代码最重要的是清晰,包括思路的清晰和代码结构的清晰。我们无法 ... -
[转载]TopCoder插件
2011-09-08 22:13 1006转载自:http://acm.cugb.edu.cn/blog ... -
UVALive 5112 - Sales Prediction
2011-01-06 10:19 1219封装了矩阵类 比赛做得很郁闷,为什么别人写得很长、很罗嗦的代码 ... -
hdu 3236
2010-12-12 14:10 825终于能过这道题了,算是背包必做题之一吧 /* * Au ... -
pku 1018
2010-12-11 15:18 645写了两三个版本,最后这个效率最高 #include < ... -
布斯(Booth)乘法
2010-10-07 19:59 1169源自http://watashi.ws/blog/1515/z ... -
高斯消元
2010-10-07 14:18 833import java.util.*; import j ... -
整数划分
2010-10-07 10:38 857#include <cstdio> #inc ... -
Treap
2010-09-18 22:19 1003// Treap // Tested: bjtu1057 ... -
矩阵快速幂
2010-09-18 14:24 1070typedef LL matrix[55][55]; ... -
maximum clique 最大团
2010-09-02 18:12 1166最大团模板 #include <cstdio> ... -
计算Jacobi符号
2010-08-31 13:15 1332Quadratic reciprocity The Jacob ... -
Java 高效I/O
2010-08-19 16:54 805static BufferedReader cin = ... -
DLX pku 3076
2010-08-11 23:45 918标准数独,精确覆盖 // pku3076.cpp #in ... -
DLX hust 1017
2010-08-11 16:50 877“精确覆盖”问题 #include <cstdio& ... -
DLX hdu 3498
2010-08-11 16:48 1079“多重覆盖”或“重复覆盖”问题 #include < ... -
hdu 3509
2010-08-09 11:22 1024推导公式的题目,矩阵幂关键就在于构造系数矩阵 备忘: S(n, ...
相关推荐
【RMQ模板11】:RMQ(Range Minimum Query)是在一个数组中寻找给定范围内的最小值的问题。模板通常提供了高效的数据结构或算法来快速回答这类查询,如使用STL的`std::vector`或自定义的数据结构。 【马拉车算法...
该模板基于默认的RMQ模板。 实际上,它是相同的模板应用程序,但有以下更改: /controllers/main_controller.rb已经移动到/screens/main_screen.rb与推广惯例保持一致 使用ProMotion助手方法创建导航栏 安装及使用...
3.线段树模板(模板为区间加法) (线段树染色) (区间最小值) 4.线性基 (求异或第k大) 5.主席树(静态求区间第k小) (区间中小于k的数量和小于k的总和) (区间中第一个大于或等于k的值) 6.权值线段树 (求逆序对) 7.动态...
图论--LCA--在线RMQ ST 最小环: 图论--最小环--Floyd模板 树的直径: 图论--树的直径--DFS+树形DP模板 树的重心: 图论--树的重心(DFS) 模板 生成树: 图论--最小生成树--Kruscal 模板 ...
--RMQ --改点堆优化的dijkstra算法 --快速付利叶变换 --稳定婚姻问题 --SPFA(最短路快速算法) // thanks to love8909 几何相关 --初等几何学 --多边形几何 --几种凸包算法 --半平面交算法 --旋转卡壳算法 数据结构...
ACM-ICPC算法模板1是一种常用的竞赛编程算法模板,涵盖了图论、并查集、最小生成树、Kruskal、堆优化、Prim、Dijkstra、最近公共祖先、RMQ-ST、强连通分量树链剖分等多种算法和数据结构。以下是该模板的详细知识点...
"组合查询模板"就是一个针对这种情况设计的工具,它利用PowerBuilder(PB)这一强大的可视化开发环境,实现了多条件组合查询的功能。下面我们将深入探讨这个主题。 PowerBuilder(PB)是一款面向对象的快速应用开发...
5.1.5 An(N), O(1)> algorithm for the restricted RMQ 60 5.1.6 An AC programme 61 5.2 最长公共子序列LCS 64 5.3 最长上升子序列/最长不下降子序列(LIS) 65 5.3.1 O(n^2) 65 5.3.2 O(nlogn) 66 5.4 Joseph问题 67...
### ACM算法常用模板详解 #### 图论部分:Tarjan算法LCA **知识点解析:** 在ACM竞赛中,寻找二叉树中的最近公共祖先(Least Common Ancestor, LCA)是一个非常重要的问题。其中,Tarjan算法是一种高效且通用的...
算法文档无代码RMQ&LCA问题提取方式是百度网盘分享地址
ACM 算法模板集 Contents 一. 常用函数与STL 二. 重要公式与定理 1. Fibonacci Number 2. Lucas Number 3. Catalan Number 4. Stirling Number(Second Kind) 5. Bell Number 6. Stirling's Approximation 7. Sum of ...
标题“wata ACM 模板 v0.9”中的“wata”可能是一个编写该模板的团队或个人的名称,而“模板 v0.9”则表示这是该模板的第0.9版本,表明它可能是一个尚在完善中的工作版本。 在描述中提到“wata模板,著名ACM备战...
包括树剖,线段树,splay,Treap,网络流,RMQ,数论函数求值,主席树,树状数组,LCA,CRT,BSGS,树套树等模板。(注:其中的两个cdq模板都没用的,整体二分写错了,其余模板可以自行测试。 p.s.有些可能与一些已...
NOTONLLY的SBT模板.cpp NOTONLLY的划分树模板.cpp NOTONLLY的后缀数组模板.cpp RMQ-ST算法.cpp RMQ线段树.cpp SBT.cpp SBT2.cpp splay伸展树.cpp ST表.cpp Treap.cpp Trie树.cpp 二叉堆.cpp 二维线段树.cpp 后缀数组...
- 动态规划(DP)、0/1背包问题(0/1-Knapsack)、区间动态规划(RMQ-ST)、后缀数组(LCP-RMQ-ST)。 - 最长公共子序列(LCS)。 - 这些算法在解决多阶段决策问题时非常有效,如资源分配、序列对比等。 5. 字符串处理算法: ...
8.6 LCA和RMQ 167 8.7 割和桥 171 8.8 最小生成树(kruskal) 172 8.9 最短路径 173 8.10 最大网络流 175 8.11 最小费用流 180 8.12 最大团问题 182 8.13 二分图匹配 184 8.14 带权的最优二分图匹配 184 9.搜索算法...
LCA与RMQ(最近公共祖先和区间查询):LCA用于求解树上任意两点的最近公共祖先,而RMQ是解决在一个区间内寻找最小值的问题。 最短路算法:包括Dijkstra、SPFA、Floyd等,这些算法用于求解单源最短路径、多源最短...
- RMQ(Range Minimum/Maximum Query)问题的不同解决算法。 - LCA(Lowest Common Ancestor)问题的离线算法。 - 带权值的并查集。 - 快速排序、堆栈、区间最大频率。 - 归并排序、二分查找以及各种字符串处理算法...
这个模板可能包含计算二叉树或树中任意两个节点最近公共祖先的算法,如Mo's Algorithm或基于RMQ(Range Minimum Query)的数据结构。 3. **KMP.cpp**:KMP算法是一种字符串匹配算法,用于在一个文本串中查找一个...