http://acm.hdu.edu.cn/submit.php?pid=3183

初探rmq,这道题看了题解还是写了好久。原因是rmq处理字符串时没有自己写min函数,导致把返回的字符当成下标处理了。

这题也可以直接贪心写,思路和rmq一样,查找的方法效率低一些。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std; char a[],ans[];
int dp[][]; int Min(int x,int y)
{
return a[x] <= a[y] ? x : y;
} void rmq_init(int len)
{
for(int i = ;i < len;i++) dp[i][] = i;
for(int j = ;(<<j) < len;j++)
{
for(int i = ;i+(<<j)- < len;i++)
{
dp[i][j] = Min(dp[i][j-],dp[i+(<<(j-))][j-]);
}
}
} int rmq_query(int l,int r)
{
int k = (int)(log((double)(r-l+))/log(2.0));
return Min(dp[l][k],dp[r-(<<k)+][k]);
} int main()
{
int n,i;
while(~scanf("%s%d",a,&n))
{
int len = strlen(a);
rmq_init(len);
n = len-n;
int pos = ,num = ;
while(n)
{
pos = rmq_query(pos,len-n);
ans[num++] = a[pos++];
n--;
}
for(i = ;i < num && ans[i] == '';i++);
if(i == num) printf("0\n");
else
{
for(;i < num;i++) printf("%c",ans[i]);
printf("\n");
}
}
return ;
}

最新文章

  1. ARMGNU伪指令
  2. gulp教程之gulp-htmlmin
  3. android之广播(二)
  4. STM32 ucosii 串口接收数据 遇到的问题及解决思路
  5. PHP ServerPush
  6. PHP遍历文件夹下的文件和获取到input name的值
  7. FatMouse&#39;s Speed(HDU LIS)
  8. nginx做yum源
  9. json模块及其API
  10. Go基础系列:struct和嵌套struct
  11. html 背景
  12. django基础之二
  13. Centos7 教程收集ing
  14. Oracle居然把Java EE的未来押在Rest API上了
  15. Last_SQL_Errno: 1062
  16. java中的继承(is a )和组合(has a)
  17. *.hbm.xml作用是什么
  18. DEDE 5.7中各函数所在的文件和位置
  19. Android线程与线程池
  20. JavaScript基础深入之----参数传递的分析与总结

热门文章

  1. MakeDown效果
  2. NOIP提高组2018试题解析 Day1 T1 铺设道路 P5019
  3. SpringCloud之Eureka(注册中心集群篇)(三)
  4. 每天玩转3分钟 MyBatis-Plus - 1. 配置环境
  5. git查看远程仓库和本地的区别
  6. redis 支持事务
  7. 9.Break和Continue
  8. Java并发关键字Volatile 详解
  9. 彻底理解Future模式
  10. 趣学CCNA 路由与交换