摘要: 基础入门 给定数组 和 数字T, 求最大位置K 满足 sum(1 - k) <= t; 最简单的想法就是 前缀和 + 二分, 每次查询时间复杂度log(n), 对于数列最左端的数据没有必要 这里的倍增可以理解为二分的改良优化版, 设K点为0, P点为1 1. 每次试从当前点K往后加P个数是否小于T 阅读全文
posted @ 2019-04-07 09:26 张浦 阅读(167) 评论(0) 推荐(0) 编辑
摘要: ST算法是区间倍增保存信息的典型例子 树高log2(n) + 1, 第i行的每个结点保存从原数组当前位之后 (1 << (i - 1)) 的最大值 很容易发现最大值不断传递并符合通式 rmq[i][j] = max(rmq[i - 1][j], rmq[i - 1][j + (1 << (i - 1 阅读全文
posted @ 2019-04-07 09:25 张浦 阅读(104) 评论(0) 推荐(0) 编辑
摘要: 奇数码问题 给定奇数版, 和两种状态A B 问能否有解使板A 变为板 B 例: 1 2 3 0 4 6 7 5 8 1 2 3 4 5 6 7 8 0 解: 将板A, B化为一维向量, 转化为逆序对问题 首先去掉位0 有 1.空格的左右移动不影响整个串的顺序 2.空格的上下移动必有等价与 swap( 阅读全文
posted @ 2019-04-07 09:19 张浦 阅读(108) 评论(0) 推荐(0) 编辑
摘要: 字符串最小表示: 给定一循环字符串,求出位置k使得从k位置开始的字符串字典序最小 解法 : 设双指针i, j 比较 s[i] 与 s[j] 的关系 若s[i] == s[j] 则以i,j开头的两字符的大小关系目前是相同的 直接向后, 找到第一个不同点i,j 若有s[i + k] > s[j + k] 阅读全文
posted @ 2019-04-07 09:19 张浦 阅读(92) 评论(0) 推荐(0) 编辑