博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【一维RMQ】HDU-3183
阅读量:5366 次
发布时间:2019-06-15

本文共 1198 字,大约阅读时间需要 3 分钟。

/*  * File:   main.cpp  * Author: lenovo  *  * Created on 2011年10月11日, 上午10:50 */ #include 
#include
#include
#include
#include
using namespace std; /* 题目大意是给你一个n位数,和要删除数字的个数m,要使得留下的数字最小 * 想法是用rmq找到n-m个最小的数字就行 * 需要注意的问题是不能颠倒数字的顺序 * */ char str[1010] , out[1010]; int m , dp[1010][12]; void ini(int len) /*一个模板*/ {
for(int i = 0 ; i < len ; i++) dp[i][0] = i; for(int j = 1 ; 1 << j <= len ; j++) for(int i = 0 ; i+(1 << j)-1 < len ; i++) {
if(str[dp[i][j-1]] <= str[dp[i+(1<<(j-1))][j-1]]) dp[i][j] = dp[i][j-1]; else dp[i][j] = dp[i+(1<<(j-1))][j-1]; } } int rmq(int x , int y) /*另外一个模板*/ {
int k = log(double(y-x+1)) / log(2.0); int a1 = dp[x][k]; int a2 = dp[y-(1<
0) { pos = rmq(pos+1,len-n); /*在选择的数字后面选择 因为至少要保留n位*/ n--; out[k++] = str[pos]; /*存在out字符数组里面*/ } int i; for(i = 0 ; i < k ; i++) if(out[i] != '0') break; if(i == k) printf("0"); for(; i < k ; i++) printf("%c",out[i]); printf("\n"); } return 0; }

转载于:https://www.cnblogs.com/zuckerTT/archive/2011/10/11/2207012.html

你可能感兴趣的文章
docker 数据卷管理
查看>>
adb
查看>>
Apache Tomcat部署java web项目
查看>>
转泛型
查看>>
第二周 9.6-9.12
查看>>
347. Top K Frequent Elements
查看>>
angular4.0配置同时使用localhost和本机IP访问项目
查看>>
用mkdirs创建目录
查看>>
[转] Web前端优化之 Server篇
查看>>
如何让一个div的大小,从某一个特定值开始,随内容的增加而自动变化?
查看>>
BZOJ1801 [Ahoi2009]chess 中国象棋 【dp】
查看>>
P1977 出租车拼车(DP)
查看>>
iOS开发--完整项目
查看>>
我的博客园皮肤模板
查看>>
正则表达式
查看>>
java基础:不同进制的表现形式
查看>>
Base64转换为blob对象
查看>>
gulp自动化压缩合并、加版本号解决方案
查看>>
windows下面安装Python和pip教程
查看>>
Java 动态向 JTable 中添加数据
查看>>