hduacm 3183 rmq
2015-06-04 13:55
176 查看
http://acm.hdu.edu.cn/showproblem.php?pid=3183
问题等价与取N-M个数,每次取的时候保证后面能取的个数足够,并且取的数最小 查询最小用rmq
View Code
问题等价与取N-M个数,每次取的时候保证后面能取的个数足够,并且取的数最小 查询最小用rmq
#include<iostream> #include<algorithm> #include<cstdio> #include<cstring> using namespace std; const int maxn = 10000 + 5; int N,M,d[maxn][20]; char s[maxn]; struct RMQ{ void init() { N = strlen(s); for (int i = 0;i<N;i++) d[i][0] = s[i]; for (int k = 1;(1<<k)<=N;k++) { for (int i = 0;i<N;i++) d[i][k] = min(d[i][k-1],d[i+(1<<(k-1))][k-1]); } } int query(int L,int R) { int k = 0; while (1<<(k+1)<=R-L+1) k++; return min(d[L][k],d[R-(1<<k)+1][k]); } }; RMQ rmq; int main() { while (~scanf("%s%d",s,&M)) { rmq.init(); M = N - M; int mv = 0; bool flag = true; for (int i = M;i;i--) { int c = rmq.query(mv,N-i); while (mv<N&&s[mv]!=c) mv++; mv++; if (c=='0'&&flag) continue; flag = false; printf("%c",c); } if (flag) printf("0"); printf("\n"); } return 0; }
View Code
相关文章推荐
- 日常用到的单位
- [cernRoot]How to get tree name from root file
- Java做服务器开发语言
- SurfaceView的烦恼(一)-双缓存与清屏
- 能完全通过声音控制的,除了你家楼道里的灯泡,原来还有这么多产品
- Android中Toast的几种用法
- scala编程--scala基础特征
- Android Studio 的坑
- 5个强大的Java分布式缓存框架推荐
- selenium如何解决window安全验证问题
- TextView 的ScrollView滚动效果
- android TextView 带滚动条,和ScrollView 用法(暂时觉得ScrollView滑动速度比较快)
- Objective -C内存管理
- JQuery.Ajax之错误调试帮助信息
- Android的xml/assets/raw资源使用详解
- PHP数组操作汇总 php数组的使用技巧
- 使用visual studio 2013 快速搭建phonegap开发环境
- Duang ! P6 PPM 说好的R9呢?
- 分享一下source insight 3.5的快捷配置及我的utils.em
- SGU124 Broken line