hdu 3183 st表
// 题意:从长度为 N 的字符串中删除 M 个字符,使得生成的新串的字典序最小
// 思路:反向构造
1 #include "bits/stdc++.h" 2 using namespace std; 3 const int MAXN = 100010; 4 int n; 5 char ans[MAXN]; 6 int Min[MAXN][20], Max[MAXN][20]; 7 8 // 建st表, ans[MAXN], n读入之后调用 9 void makeRmq() 10 { 11 int i, j, len; 12 for(i = 1; i <= n; ++i) { 13 Min[i][0] = Max[i][0] = i; 14 } 15 16 int p, q; 17 for(j = 1; (len = 1 << j) <= n; ++j) { 18 for(i = 1; i + len - 1 <= n; ++i) { 19 p = Min[i][j - 1]; 20 q = Min[i + (len >> 1)][j - 1]; 21 if(ans[p] < ans[q] || (ans[p] == ans[q] && p < q)) { 22 Min[i][j] = p; 23 } 24 else { 25 Min[i][j] = q; 26 } 27 28 // p = Max[i][j - 1]; 29 // q = Max[i + (len >> 1)][j - 1]; 30 // if(ans[p] > ans[q] || (ans[p] == ans[q] && p < q)) { 31 // Max[i][j] = p; 32 // } 33 // else { 34 // Max[i][j] = q; 35 // } 36 } 37 } 38 } 39 40 // 取 [l, r] 的最小值和最大值放入 minValue 和 maxValue 中,且不需要初始化 minValue 和 maxValue 41 void ask(int l, int r, int &min_pos) 42 { 43 int pow_num, len, p, q; 44 pow_num = int(log(r - l + 1) / log(2)); 45 len = 1 << pow_num; 46 47 p = Min[l][pow_num]; 48 q = Min[r - len + 1][pow_num]; 49 if(ans[p] < ans[q] || (ans[p] == ans[q] && p < q)) { 50 min_pos = p; 51 } 52 else { 53 min_pos = q; 54 } 55 56 // p = Max[l][pow_num]; 57 // q = Max[r - len + 1][pow_num]; 58 // if(ans[p] > ans[q] || (ans[p] == ans[q] && p < q)) { 59 // maxValue = ans[p]; 60 // } 61 // else { 62 // maxValue = ans[q]; 63 // } 64 } 65 char res[1010]; 66 int tot; 67 int m; 68 69 int main() 70 { 71 while (scanf("%s%d", ans + 1, &m) != EOF) { 72 tot = 0; 73 n = strlen(ans + 1); 74 makeRmq(); 75 int cnt = n - m; 76 int min_pos; 77 int l = 1, r = m + 1; 78 while (cnt--) { 79 ask(l, r, min_pos); 80 res[tot++] = ans[min_pos]; 81 l = min_pos + 1; 82 ++r; 83 } 84 res[tot] = '\0'; 85 int index = 0; 86 while(index <= tot - 1 && res[index] == '0') { 87 ++index; 88 } 89 if(index == tot) { 90 printf("0\n"); 91 continue; 92 } 93 printf("%s\n", res + index); 94 } 95 }
转载于:https://www.cnblogs.com/AC-Phoenix/p/4665580.html
hdu 3183 st表相关推荐
- BZOJ3166 [Heoi2013]Alo 【可持久化trie树 + 二分 + ST表】
题目 Welcome to ALO ( Arithmetic and Logistic Online).这是一个VR MMORPG , 如名字所见,到处充满了数学的谜题. 现在你拥有n颗宝石,每颗宝石 ...
- 【JZOJ5064】【GDOI2017第二轮模拟day2】友好城市 Kosarajo算法+bitset+ST表+分块
题面 在Byteland 一共有n 座城市,编号依次为1 到n,这些城市之间通过m 条单向公路连接. 对于两座不同的城市a 和b,如果a 能通过这些单向道路直接或间接到达b,且b 也能如此到达a,那么 ...
- poj3264(ST表模版)
ST 表算法用于查询区间最值,为静态算法,查询区间最值时不能更新信息,预处理复杂度为 O(nlongn),查询为 O(1).适用于不更新信息且查询很多的问题. 题意:求解范围内最高的奶牛和最短的奶牛之 ...
- HDU2586(ST表+dfs)
ST 表算法用于查询区间最值,为静态算法,查询区间最值时不能更新信息,预处理复杂度为 O(nlongn),查询为 O(1).适用于不更新信息且查询很多的问题. 题意:首先要计算出各个可到达点之间的长度 ...
- HDU5443(ST表)
ST 表算法用于查询区间最值,为静态算法,查询区间最值时不能更新信息,预处理复杂度为 O(nlongn),查询为 O(1).适用于不更新信息且查询很多的问题. 题意:找出给定区间的最大水源. #inc ...
- HDU3183(ST表)
ST (RMQ)表 ST 表算法用于查询区间最值,为静态算法,查询区间最值时不能更新信息,预处理复杂度为 O(nlongn),查询为 O(1).适用于不更新信息且查询很多的问题. 题意:从给出的一串数 ...
- [51nod] 1766树上的最远点对 树的直径 树剖LCA+ST表静态查询
题意: 给你一棵带权树,q次查询,每次给出两个区间,[l1,r1][l2,r2][l_1,r_1] [l_2,r_2][l1,r1][l2,r2]从这两个区间中分别选择两个数字,使得这两个点的 ...
- 后缀数组 ---- 2018~2019icpc焦作H题[后缀数组+st表+二分+单调栈]
题目链接 题目大意: 给出nnn个数,定义f[l,r]f[l,r]f[l,r]表示 区间[l,r][l,r][l,r]的最大值,求所有 子区间的最大值的和,要求相同的子区间只能算一次 比如数列 5 6 ...
- szu 寒训 day#3 ST表 和 LCA问题 附例题 菜鸡解法
昨天我们讲述了树状数组今天我们来讲ST表(解决静态RMQ (Rang Minmum/Maximum Query)问题的数据结构) 假如说我们暴力去查询区间的最值得话每次操作都是O(n) 如果询问次数跟 ...
最新文章
- java中什么是空指针异常_java中空指针异常的问题,是怎么回事?请看代码
- Solr的函数查询(FunctionQuery)
- java消息推送怎么实现_调用钉钉接口实现机器人推送消息
- python下面代码是什么_python代码下面__name__= __main__怎么使用 作用是什么?
- 学习3D游戏开发进阶之路
- 围棋天才柯洁怒怼央视国际记者,用实力斩获清华大学免试资格
- ElasticSearch外部版本控制
- c++ 多个字符串排序_RPython Data Science系列:数据处理(5)--字符串函数基于R(一)
- 关于机器人方面的sci论文_如何给论文润色?从这两个方面入手
- Go语言 关于go error处理风格的一些讨论和个人观点(上)
- 公文签收 php,公文收发管理系统
- 便携式手持 频谱分析仪_便携式频谱分析仪
- vue网易云二维码登录
- go import导入包详解
- 【GPS周-周内秒、BDS周-周内秒转换与逆转换】
- css clip-path和drop-shadow生成自定义图形、阴影
- 6688.COM CEO 王峻涛致贺洪涛软件成立
- 都2021年了,不会还有人连深度学习都不了解吧(二)- 卷积篇
- 第一章 概率论的基本概念 1.6 独立性
- vue组件封装——公用基础table组件