// 题意:从长度为 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表相关推荐

  1. BZOJ3166 [Heoi2013]Alo 【可持久化trie树 + 二分 + ST表】

    题目 Welcome to ALO ( Arithmetic and Logistic Online).这是一个VR MMORPG , 如名字所见,到处充满了数学的谜题. 现在你拥有n颗宝石,每颗宝石 ...

  2. 【JZOJ5064】【GDOI2017第二轮模拟day2】友好城市 Kosarajo算法+bitset+ST表+分块

    题面 在Byteland 一共有n 座城市,编号依次为1 到n,这些城市之间通过m 条单向公路连接. 对于两座不同的城市a 和b,如果a 能通过这些单向道路直接或间接到达b,且b 也能如此到达a,那么 ...

  3. poj3264(ST表模版)

    ST 表算法用于查询区间最值,为静态算法,查询区间最值时不能更新信息,预处理复杂度为 O(nlongn),查询为 O(1).适用于不更新信息且查询很多的问题. 题意:求解范围内最高的奶牛和最短的奶牛之 ...

  4. HDU2586(ST表+dfs)

    ST 表算法用于查询区间最值,为静态算法,查询区间最值时不能更新信息,预处理复杂度为 O(nlongn),查询为 O(1).适用于不更新信息且查询很多的问题. 题意:首先要计算出各个可到达点之间的长度 ...

  5. HDU5443(ST表)

    ST 表算法用于查询区间最值,为静态算法,查询区间最值时不能更新信息,预处理复杂度为 O(nlongn),查询为 O(1).适用于不更新信息且查询很多的问题. 题意:找出给定区间的最大水源. #inc ...

  6. HDU3183(ST表)

    ST (RMQ)表 ST 表算法用于查询区间最值,为静态算法,查询区间最值时不能更新信息,预处理复杂度为 O(nlongn),查询为 O(1).适用于不更新信息且查询很多的问题. 题意:从给出的一串数 ...

  7. [51nod] 1766树上的最远点对 树的直径 树剖LCA+ST表静态查询

    题意: 给你一棵带权树,q次查询,每次给出两个区间,[l1,r1][l2,r2][l_1,r_1] [l_2,r_2][l1​,r1​][l2​,r2​]从这两个区间中分别选择两个数字,使得这两个点的 ...

  8. 后缀数组 ---- 2018~2019icpc焦作H题[后缀数组+st表+二分+单调栈]

    题目链接 题目大意: 给出nnn个数,定义f[l,r]f[l,r]f[l,r]表示 区间[l,r][l,r][l,r]的最大值,求所有 子区间的最大值的和,要求相同的子区间只能算一次 比如数列 5 6 ...

  9. szu 寒训 day#3 ST表 和 LCA问题 附例题 菜鸡解法

    昨天我们讲述了树状数组今天我们来讲ST表(解决静态RMQ (Rang Minmum/Maximum Query)问题的数据结构) 假如说我们暴力去查询区间的最值得话每次操作都是O(n) 如果询问次数跟 ...

最新文章

  1. java中什么是空指针异常_java中空指针异常的问题,是怎么回事?请看代码
  2. Solr的函数查询(FunctionQuery)
  3. java消息推送怎么实现_调用钉钉接口实现机器人推送消息
  4. python下面代码是什么_python代码下面__name__= __main__怎么使用 作用是什么?
  5. 学习3D游戏开发进阶之路
  6. 围棋天才柯洁怒怼央视国际记者,用实力斩获清华大学免试资格
  7. ElasticSearch外部版本控制
  8. c++ 多个字符串排序_RPython Data Science系列:数据处理(5)--字符串函数基于R(一)
  9. 关于机器人方面的sci论文_如何给论文润色?从这两个方面入手
  10. Go语言 关于go error处理风格的一些讨论和个人观点(上)
  11. 公文签收 php,公文收发管理系统
  12. 便携式手持 频谱分析仪_便携式频谱分析仪
  13. vue网易云二维码登录
  14. go import导入包详解
  15. 【GPS周-周内秒、BDS周-周内秒转换与逆转换】
  16. css clip-path和drop-shadow生成自定义图形、阴影
  17. 6688.COM CEO 王峻涛致贺洪涛软件成立
  18. 都2021年了,不会还有人连深度学习都不了解吧(二)- 卷积篇
  19. 第一章 概率论的基本概念 1.6 独立性
  20. vue组件封装——公用基础table组件

热门文章

  1. python 字符匹配_python 中如何匹配字符串
  2. 大厂首发!尚硅谷docker高级
  3. CUDA编程快速入门教程
  4. 【深度学习】对抗扰动、垃圾/钓鱼邮件自动分类和UEBA
  5. python【力扣LeetCode算法题库】945- 使数组唯一的最小增量
  6. lower_boundupper_bound
  7. android图片的处理方法,android 处理图片到固定像素解决办法
  8. 前端如何转换 schema 和 xml
  9. 网站推广专员浅析网站推广中网站优化的价值取向究竟为何?
  10. 网站推广——网站推广专员浅析如何轻松完成网站关键词优化?