试题描述
输入正整数N和M,在N中删除掉M位,能留下的最大整数是多少?
输入
正整数N和M
输出
留下的最大整数
输入示例
233390323 5
输出示例
9323
其他说明
1<=N<=10^1000
1<=M<=1000
 

N的长度比较小,胡搞就行了。

那么如果1<=N<=10^1000000呢?

考虑当前最后保留的位置是cur,还要删m个字符,那么下一个要删的区间应是[cur+1,cur+m+1],那么我们要设计一个数据结构快速找到区间最大值。

这显然是个滑动窗口,用单调队列做做就行了(<--WZJ这蒟蒻竟然没看出来写了线段树)。注意这组数据636546796 8要输出9,即如果最后还没删够要输出前n-m个得到的字符。

#include<cstdio>
#include<cctype>
#include<ctime>
#include<cstring>
#include<algorithm>
#define rep(i,s,t) for(int i=s;i<=t;i++)
#define ren for(int i=first[x];i!=-1;i=next[i])
using namespace std;
inline int read() {
int x=,f=;char c=getchar();
for(;!isdigit(c);c=getchar()) if(c=='-') f=-;
for(;isdigit(c);c=getchar()) x=x*+c-'';
return x*f;
}
char s[],q[];
int maxv[];
void build(int o,int l,int r) {
if(l==r) maxv[o]=l;
else {
int mid=l+r>>,lc=o<<,rc=lc|;
build(lc,l,mid);build(rc,mid+,r);
if(s[maxv[lc]]>=s[maxv[rc]]) maxv[o]=maxv[lc];
else maxv[o]=maxv[rc];
}
}
int ql,qr;
int query(int o,int l,int r) {
if(ql<=l&&r<=qr) return maxv[o];
int mid=l+r>>,lc=o<<,rc=lc|;
if(qr<=mid) return query(lc,l,mid);
if(ql>mid) return query(rc,mid+,r);
int ans1=query(lc,l,mid),ans2=query(rc,mid+,r);
return s[ans1]>=s[ans2]?ans1:ans2;
}
int main() {
int m,cnt=,t;
scanf("%s%d",s+,&m);t=m;
int n=strlen(s+),cur=;
build(,,n);
while(cur<n) {
ql=cur+;qr=min(cur+m+,n);
int next=query(,,n);
m-=next-cur-;cur=next;
q[++cnt]=s[cur];if(m<=) break;
}
if(m) rep(i,,n-t) putchar(q[i]);
else {
printf("%s",q+);
rep(i,cur+,n) putchar(s[i]);
}
return ;
}

COJ 删除数字的更多相关文章

  1. T2988 删除数字【状压Dp+前缀和优化】

    Online Judge:从Topcoder搬过来,具体哪一题不清楚 Label:状压Dp+前缀和优化 题目描述 给定两个数A和N,形成一个长度为N+1的序列,(A,A+1,A+2,...,A+N-1 ...

  2. lintcode - 删除数字

    class Solution { public: /* * @param A: A positive integer which has N digits, A is a string * @para ...

  3. react之redux增加删除数字

    比如在页面中添加和删除‘222’ action.js export const ADD= 'ADD'; export const RED='RED'; export const add=(str)=& ...

  4. 【编程题目】n 个数字(0,1,…,n-1)形成一个圆圈,从数字 0 开始

    第 18 题(数组):题目:n 个数字(0,1,…,n-1)形成一个圆圈,从数字 0 开始,每次从这个圆圈中删除第 m 个数字(第一个为当前数字本身,第二个为当前数字的下一个数字).当一个数字删除后, ...

  5. Oracle删除指定用户下所有对象

    --.sql脚本 --唯一注意的是下面的d:\dropuserobj.sql为操作的.sql; --用于删除当前用户的所有对象 --use for drop all objects in curren ...

  6. IT公司100题-18-圆圈中最后剩下的数字

    问题描述: n个数字(下标为0, 1, …, n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(当前数字从1开始计数).当一个数字被删除后,从被删除数字的下一个数字开始计数,继续删除 ...

  7. 转: 数字证书原理 https 完整过程解析

    点评: 讲的非常的详细与全面,值得一看. 转: http://www.cnblogs.com/JeffreySun/archive/2010/06/24/1627247.html 文中首先解释了加密解 ...

  8. 基于visual Studio2013解决面试题之1001去除数字

     题目

  9. [区块链|非对称加密] 对数字证书(CA认证)原理的回顾

    摘要:文中首先解释了加密解密的一些基础知识和概念,然后通过一个加密通信过程的例子说明了加密算法的作用,以及数字证书的出现所起的作用.接着对数字证书做一个详细的解释,并讨论一下windows中数字证书的 ...

随机推荐

  1. 查看现有运行的linux服务器有多少内存条

    i161 admin # ssh 192.168.5.209 dmidecode | grep 'Ending Address' -B1 -A2    Starting Address: 0x0000 ...

  2. devstack重启后不能运行

    devstack 重启后没有运行服务. 解释: “Note if you reboot your machine running devstack, you need to rerun stack.s ...

  3. Digit Counts

    Count the number of k's between 0 and n. k can be 0 - 9. Example if n = 12, k = 1 in [0, 1, 2, 3, 4, ...

  4. explict关键字

    [本文链接] http://www.cnblogs.com/hellogiser/p/explict.html [分析] explicit 只对构造函数起作用,用来抑制隐式转换. Suppose yo ...

  5. centos下编译安装mysql5.5/5.6

    2013年11月16日 19:39:13 centos 6 mysql 5.5.28 我只说些我出错的地方: cmake后删除的方法是 xargs rm < install_manifest.t ...

  6. C++ friend

    如果类A希望类B可以访问它的私有成员, 可以把类B设置为友元类. // 类A,希望把私有成员公开给类B class A {     friend class B;// 把B设置为友元类 public: ...

  7. 在iOS开发中,给项目添加新的.framework

    首先需要了解一下iOS中静态库和动态库.framework的概念 静态库与动态库的区别 首先来看什么是库,库(Library)说白了就是一段编译好的二进制代码,加上头文件就可以供别人使用. 什么时候我 ...

  8. Android中几种定位 方式

    介绍的几种定位方式 http://www.cnblogs.com/cuihongyu3503319/p/3863867.html 百度地图api: http://lbsyun.baidu.com/in ...

  9. 总结sqlserver数据库性能优化相关的注意事项

    一.分析阶段一般来说,在系统分析阶段往往有太多需要关注的地方,系统各种功能性.可用性.可靠性.安全性需求往往吸引了我们大部分的注意力,但是,我们必须注意,性能是很重要的非功能性需求,必须根据系统的特点 ...

  10. AngularJS深入(5)——provider

    太精彩,不得不全文引用. 到这个层次,可能才敢说自己懂了吧... http://syaning.com/2015/07/21/dive-into-angular-5/ 在使用AngularJS的时候, ...