hdu 3183 A Magic Lamp RMQ ST 坐标最小值

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3183

题目大意:

从给定的串中挑出来m个数使得剩余的数字最小,串的序列不能改变

思路:

  • 将问题转化为求在n个数中挑选n-m个数,使之最小。假设最极端的情况,所有最大的数字都在左侧,占据了m个位置,那么我们需要挑选的最小的数字的第一位就是在m+1位上。依次类推,第二位在m+2位上,最后一位也就在原串的最后一位上。反过来,假设最大的数字都在右侧,占了m个位置。那么我们需要挑选的最小数字的最后一位就是在n-m位上,倒数第二位在n-m-1位上,最终最后一位就是在第一位上。至此,可以得到我们挑选最小数的第一位的取值范围就是[1,m+1]。类比可得,第二位取值范围[2,m+2],...。假设我们此时已经求出了第一位所在的位置x,那么第二位数字的范围就可以进一步缩小为[x+1,m+2],依次我们可以求出全部的数字。同时要注意,ST表中保存的是该段区间最小值的下标。
  • ST在线 预处理O(nlogn) 查询O(1) 运行时间:15ms
  • 这道题注意的细节有很多,写了很久才敢提交还是WA了3发。/(ㄒoㄒ)/~~要注意题中说n不会大于串的长度是不成立的,要来特判

代码:

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <math.h>
using namespace std;
const int maxn = 1005;
int minindex[maxn][10],data[maxn],res[maxn];
inline void init(int len) {
for(int i=1; i<=len; ++i) minindex[i][0]=i;
for(int j=1; j<=10; ++j) {
for(int i=1; i<=len; ++i) {
if((i+(1<<j)-1)<=len) {
int t1=minindex[i][j-1],t2=minindex[i+(1<<(j-1))][j-1];
if(data[t1]<=data[t2]) minindex[i][j]=t1;
else minindex[i][j]=t2;
}
}
}
}
inline int ask(int l, int r) {
int k=31-__builtin_clz(r-l+1);
int t1=minindex[l][k],t2=minindex[r-(1<<k)+1][k];
if(data[t1]<=data[t2]) return t1;
else return t2;
}
int main() {
char s[1005];
int n,len,l,r,ip1,ip2;
while(~scanf("%s %d",s,&n)) {
memset(minindex,0,sizeof(minindex));
len=strlen(s);
for(int i=0; i<len; ++i) {
data[i+1]=s[i]-'0';
}
if(n>=len) {
printf("0\n");
continue;
}
init(len);
len=len-n;
l=1,r=n+1;
ip2=1;
for(int i=1; i<=len; ++i) {
ip1=ask(l,r);
res[ip2]=data[ip1];
++ip2;
l=ip1+1;
++r;
}
ip2--;
for(l=1; l<=ip2; ++l) {
if(res[l]) break;
}
if(l>ip2) {
printf("0\n");
continue;
}
for(int i=l; i<=ip2; ++i) printf("%d",res[i]);
printf("\n");
}
return 0;
}

hdu 3183 A Magic Lamp RMQ ST 坐标最小值的更多相关文章

  1. HDU 3183 - A Magic Lamp - [RMQ][ST算法]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3183 Problem DescriptionKiki likes traveling. One day ...

  2. hdu 3183 A Magic Lamp(RMQ)

    题目链接:hdu 3183 A Magic Lamp 题目大意:给定一个字符串,然后最多删除K个.使得剩下的组成的数值最小. 解题思路:问题等价与取N-M个数.每次取的时候保证后面能取的个数足够,而且 ...

  3. HDU 3183 A Magic Lamp(RMQ问题, ST算法)

    原题目 A Magic Lamp Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  4. hdu 3183 A Magic Lamp rmq或者暴力

    A Magic Lamp Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Pro ...

  5. hdu 3183 A Magic Lamp(RMQ)

    A Magic Lamp                                                                               Time Limi ...

  6. hdu 3183 A Magic Lamp 【RMQ】

    <题目链接> <转载于 >>>  > 题目大意: 给出一个长度不超过1000位的数,求删去m位数字以后形成的最小的数字是多少. 解题分析: 分析:我们可以把题 ...

  7. HDU 3183 A Magic Lamp(二维RMQ)

    第一种做法是贪心做法,只要前面的数比后面的大就把他删掉,这种做法是正确的,也比较好理解,这里就不说了,我比较想说一下ST算法,RMQ的应用 主要是返回数组的下标,RMQ要改成<=(这里是个坑点, ...

  8. hdu 3183 A Magic Lamp(给一个n位的数,从中删去m个数字,使得剩下的数字组成的数最小(顺序不能变),然后输出)

    1.题目大意是,给你一个1000位的数,要你删掉m个为,求结果最小数. 思路:在n个位里面删除m个位.也就是找出n-m个位组成最小数 所以在区间 [0, m]里面找最小的数.相应的下标标号i 接着找区 ...

  9. hdu 3183 A Magic Lamp 贪心

    #include <stdio.h> #include <string.h> #include <iostream> #include <algorithm& ...

随机推荐

  1. LeetCode 594. Longest Harmonious Subsequence (最长的协调子序列)

    We define a harmonious array is an array where the difference between its maximum value and its mini ...

  2. 2017上海QCon之旅总结(中)

    本来这个公众号的交流消息中间件相关的技术的.上周去上海参加了QCon,第一次参加这样的技术会议,感受挺多的,所以整理一下自己的一些想法接公众号和大家交流一下. 三天的内容还挺多的,原计划分上下两篇总结 ...

  3. Jquery datatable中文排序问题

    先扩展datatable的的排序功能,添加一个自定义排序函数 //为jq datatable 自定义中文排序 jQuery.fn.dataTableExt.oSort['chinese-sort-as ...

  4. OpenCV Image Watch 调试插件

    昨晚偶然发现vs2012的这个很神奇的插件,对于经常使用opencv的人来说,这个插件无疑是我们的调试神器.今天马上下载试用,感觉超级棒!~以后要想查看图像结果,不用再imshow了! Image W ...

  5. IdentityServer4 禁用 Consent screen page(权限确认页面)

    IdentityServer4 在登录完成的适合,会再跳转一次页面(权限确认),如下: 我之前以为 IdentityServer4 就是这样使用的,但实际业务场景并不需要进行权限确认,而是登陆成功后直 ...

  6. NumPy基础练习(练一遍搞定NumPy)

    import numpy as np import pandas as pd from numpy import random from numpy.random import randn ##### ...

  7. Android 开发笔记___AutoComplateTextView__自动完成文本框

    原理:EdtText结合监听器TextWatcher与下拉框spinner,一旦监控到EditText的文本发生变化,就自动弹出适配好的文字下拉内容. 属性以及设置方法: XML中的属性 代码中 说明 ...

  8. RPA(Robotic Process Automation)的概要介绍

    最近因为公司业务的需要,开始关注RPA的内容,奈何国内相关的信息太少,只能硬着头皮啃英文了. 下面记录的内容作为学习笔记,有不对的地方请大家指教. 首先RPA(Robotic Process Auto ...

  9. Spring MVC的配置与DispatcherServlet的分析

    Spring MVC是一款Web MVC框架,是目前主流的Web MVC框架之一. Spring MVC工作原理简单来看如下图所示: 接下来进行Spring MVC的配置 首先我们配置Spring M ...

  10. 从事务角度粗窥架构的可扩展性和可维护性:内容整理自java web轻量级开发面试教程

    大家多少了解过架构,也听说过使用架构后,代码和可维护性和重用性能大大提升.这里我们来通过一些关于事务的实例,来感性地体会下架构带来的在可维护性方面的便利.本文来是从 java web轻量级开发面试教程 ...