hdu3183 rmq求区间最值的下标
两个月前做的题,以后可以看看,是rmq关于求区间最值的下标
/*
hdu3183
终点
给一个整数,可以删除m位,留下的数字形成一个新的整数
rmq
取n-m个数,使形成的数最小
*/
#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdio>
#define MAXN 1010
using namespace std;
int dp[MAXN][];
int a[MAXN];
void makeRMQ(int n,int b[]){//在i到1<<j区间内的最小值的下标
for(int i=;i<n;i++)
dp[i][]=i;//区间长度等于0时
for(int j=;(<<j)-<n;j++)
for(int i=;i+(<<j)-<n;i++)
if(b[dp[i][j-]]<=b[dp[i+(<<j-)][j-]])
//这里一定要加等号,就是相等的时候取下标小的
dp[i][j]=dp[i][j-];
else
dp[i][j]=dp[i+(<<j-)][j-];
}
int rmqIndex(int s,int v,int b[]){//在区间s->v之间找区间最小值,
//加等号,取小标小的
//1<<k+1的长度必须覆盖[s,v]
int k=(int)(log(v-s+1.0)/log(2.0));//k就是那个区间[s,v]长度的log2
if (b[dp[s][k]]<=b[dp[v-(<<k)+][k]])
return dp[s][k];
else
return dp[v-(<<k)+][k];
}
char str[MAXN];
int ans[MAXN];
int main(){
int m;
while(scanf("%s%d",&str,&m)!=EOF){
int n=strlen(str);
for(int i=;i<n;i++)
a[i]=str[i]-'';
makeRMQ(n,a);
int t=;
int temp=;//temp最后=n-m
//找n-m个数,每次从[t,i]中找到最小的
for(int i=m;i<n;i++){
t=rmqIndex(t,i,a);
ans[temp++]=a[t++];
}
t=;
while(t<temp&&ans[t]==)
t++;//=滤掉高位的0!
if(t>=temp)
printf("0\n");
else{
for(int i=t;i<temp;i++)
printf("%d",ans[i]);
printf("\n");
}
}
return ;
}
hdu3183 rmq求区间最值的下标的更多相关文章
- RMQ求区间最值 nlog(n)
转载于:http://blog.csdn.net/xuzengqiang/article/details/7350465 RMQ算法全称为(Range Minimum/Maximum Query)意思 ...
- 【模板】 RMQ求区间最值
RMQ RMQ简单来说就是求区间的最大值(最小值) 核心算法:动态规划 RMQ(以下以求最大值为例) F[i,j]表示 从 i 开始 到i+2j -1这个区间中的最大值 状态转移方程 F[i,j]=m ...
- POJ - 3264 Balanced Lineup (RMQ问题求区间最值)
RMQ (Range Minimum/Maximum Query)问题是指:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,j里的最小(大)值,也就 ...
- HDU-1754-I Hate It-线段树-求区间最值和单点修改
开学新拉的题目,老题重做,思路会稍微比之前清晰,不过这也算是一点点进步了. 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很多学生很反感. 不管你喜不喜欢,现 ...
- xdoj-1324 (区间离散化-线段树求区间最值)
思想 : 1 优化:题意是覆盖点,将区间看成 (l,r)转化为( l-1,r) 覆盖区间 2 核心:dp[i] 覆盖从1到i区间的最小花费 dp[a[i].r]=min (dp[k])+a[i]s; ...
- hdu 5443 (2015长春网赛G题 求区间最值)
求区间最值,数据范围也很小,因为只会线段树,所以套了线段树模板=.= Sample Input3110011 151 2 3 4 551 21 32 43 43 531 999999 141 11 2 ...
- hdu 1754 I Hate It (线段树求区间最值)
HDU1754 I Hate It Time Limit:3000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u D ...
- RMQ(求区间最值问题)
学习博客:https://blog.csdn.net/qq_31759205/article/details/75008659 RMQ(Range Minimum/Maximum Query),即区间 ...
- ST表 求 RMQ(区间最值)
RMQ即Range Minimum/Maximun Query,中文意思:查询一个区间的最小值/最大值 比如有这样一个数组:A{3 2 4 5 6 8 1 2 9 7},然后问你若干问题: 数组A下标 ...
随机推荐
- LoadRunner进行参数化的九种方式取值和连接数据库取值
一.连接mysql数据库取值 1.首先安装odbc驱动 链接: https://pan.baidu.com/s/1WAYd4ygQqIrbB08S01hSkg 提取码: gdfs 2.操作步骤如下图: ...
- selenium_采集药品数据1_采集第一页表格
Python爬虫视频教程零基础小白到scrapy爬虫高手-轻松入门 https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.482434a6E ...
- 创建 elasticsearch 用户
创建 elasticsearch 用户 groupadd -g 3048 elasticsearch useradd -s /sbin/nologin -u 3048 -g elasticsearch ...
- linux的防火墙
关闭防火墙: systemctl stop firewalld.service #停止firewall systemctl disable firewalld.service #禁止firewall开 ...
- bzoj千题计划299:bzoj1856: [Scoi2010]字符串
http://www.lydsy.com/JudgeOnline/problem.php?id=1856 卡特兰数 从(1,1)走到(n,m),不能走y=x 上方的点,求方案数 从(1,1)走到(n, ...
- 如何用matplotlib绘制决策边界
import matplotlib.pyplot as plt import numpy as np import sklearn import sklearn.datasets import skl ...
- Neural Networks and Deep Learning 课程笔记(第三周)浅层神经网络(Shallow neural networks)
3.1 神经网络概述(Neural Network Overview ) (神经网络中,我们要反复计算a和z,最终得到最后的loss function) 3.2 神经网络的表示(Neural Netw ...
- ARMCortex系列仿真调试器
主流的调试工具1. J-LinkJ-Link是最著名的ARM开发调试工具,J-Link由SEGGER公司生产.提供对市面上几乎所有ARM内核芯片的支持.目前最新版本的J-Link产品为V8,支持JT ...
- Mac下使用Wine安装PowerDesigner15
下载: (链接: https://pan.baidu.com/s/1bpEYyIV 密码: 5ymj) 安装: 1.安装Wine 参考:http://www.cnblogs.com/EasonJim/ ...
- PreparedStatement 基于mysql数据库做分页查询和统计查询
分页查询: 统计查询: