CSL 的字符串(单调栈)
题目链接:https://ac.nowcoder.com/acm/contest/551/D
题目大意:
题目描述
- 原字符串中出现的字符,新字符串也必须包含。
- 新字符串中所有的字符均不相同。
- 新字符串的字典序是满足上面两个条件的最小的字符串。
输入描述:
输出描述:
在一行输出字典序最小的新字符串。
CSL的字符串
具体思路:
对于每一个字符,我们保存它存在的最后位置,然后用单调栈维护一个单调递增的序列就可以了。如果当前的字符大于栈顶的字符,并且当前栈顶字符的最大位置大于当前的i,就先将这个字符弹出。
AC代码:
#include<bits/stdc++.h>
using namespace std;
# define ll long long
const int maxn =2e5+;
char str[maxn];
map<char,int>pos;
map<char,int>vis;
int main()
{
stack<char>q;
scanf("%s",str+);
int len=strlen(str+);
for(int i=; i<=len; i++)
{
pos[str[i]]=i;
}
for(int i=; i<=len; i++){
if(vis[str[i]])continue;
while(!q.empty()&&q.top()>str[i]&&pos[q.top()]>i){
vis[q.top()]=;
q.pop();
}
q.push(str[i]);
vis[str[i]]=i;
}
string ans;
while(!q.empty()){
ans+=q.top();
q.pop();
}
reverse(ans.begin(),ans.end());
cout<<ans<<endl;
return ;
}
CSL 的字符串(单调栈)的更多相关文章
- D、CSL 的字符串 【栈+贪心】 (“新智认知”杯上海高校程序设计竞赛暨第十七届上海大学程序设计春季联赛)
题目传送门:https://ac.nowcoder.com/acm/contest/551#question 题目描述 CSL 以前不会字符串算法,经过一年的训练,他还是不会……于是他打算向你求助. ...
- Codeforces 873F Forbidden Indices 字符串 SAM/(SA+单调栈)
原文链接https://www.cnblogs.com/zhouzhendong/p/9256033.html 题目传送门 - CF873F 题意 给定长度为 $n$ 的字符串 $s$,以及给定这个字 ...
- BZOJ 4453: cys就是要拿英魂![后缀数组 ST表 单调栈类似物]
4453: cys就是要拿英魂! Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 90 Solved: 46[Submit][Status][Discu ...
- BZOJ 3238: [Ahoi2013]差异 [后缀数组 单调栈]
3238: [Ahoi2013]差异 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 2326 Solved: 1054[Submit][Status ...
- 【BZOJ-3238】差异 后缀数组 + 单调栈
3238: [Ahoi2013]差异 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 1561 Solved: 734[Submit][Status] ...
- poj3415 Common Substrings(后缀数组,单调栈 | 后缀自动机)
[题目链接] http://poj.org/problem?id=3415 [题意] A与B长度至少为k的公共子串个数. [思路] 基本思想是将AB各个后缀的lcp-k+1的值求和.首先将两个字符串拼 ...
- poj 3415 Common Substrings 后缀数组+单调栈
题目链接 题意:求解两个字符串长度 大于等于k的所有相同子串对有多少个,子串可以相同,只要位置不同即可:两个字符串的长度不超过1e5; 如 s1 = "xx" 和 s2 = &qu ...
- poj 3415 Common Substrings(后缀数组+单调栈)
http://poj.org/problem?id=3415 Common Substrings Time Limit: 5000MS Memory Limit: 65536K Total Sub ...
- BZOJ_3879_SvT_后缀数组+单调栈
BZOJ_3879_SvT_后缀数组+单调栈 Description (我并不想告诉你题目名字是什么鬼) 有一个长度为n的仅包含小写字母的字符串S,下标范围为[1,n]. 现在有若干组询问,对于每一个 ...
随机推荐
- 原生JS正则实现trim()
Jquery中封装有trim() 原生需要自己实现,我们可以用原型的方式自己封装trim()方法,实现去掉前后空格.前空格.后空格...所以不必抱怨,简单又灵活,这才是强大的JS的特色 String. ...
- mysql安装和操作
1.install: 下载地址:https://dev.mysql.com/downloads/ 2.下载zip包解压: 3.自己在该文件夹下创建 my.ini,并编辑内容: [mysql] # 设置 ...
- Python_sys模块
import sys import time # 实现百分比的滑动进度(1%-100%) def view_bar(num,total): rate=num/total rate_num=int(ra ...
- php如何判断数组是一维还是多维
php>4.2 int count ( mixed $var [, int $mode ] ) -- 计算数组中的单元数目或对象中的属性个数 如果可选的 mode 参数设为 COUNT_R ...
- opencv: 轮廓提取;
一般轮廓提取是通过对图像的梯度进行卷积计算,得到图像边缘(滤波),常用的边缘检测方法有candy.sobel. Laplacian等,再对二值化后的边缘图像进行轮廓计算: 1.Candy算子: cv: ...
- Linux truncate的使用方法介绍
Linux truncate的使用方法介绍 参考资料:https://www.fengbohello.top/archives/linux-truncate 本命令缩减或扩充指定文件的大小为指定值.参 ...
- Java技能
1.思维导图 Java知识思维导图 2 3.Java理解 深入理解Java:注解(Annotation)自定义注解入门 4.JAVA数据类型 基本数据类型 布尔类型:boolean 数值类型: 定点类 ...
- jQuery使用(六):DOM操作之元素包裹、克隆DOM与data的综合应用
包裹 wrap() wrapInner() wrapAll() unwrap() clone() 数据缓存机制 data 文档处理(包裹) 1.1.wrap()--将所匹配的元素用其他元素结构化标签包 ...
- HTML第二耍 列表标签
先复习下上一节 <!doctype html> <html> <head> <meta charset="utf-8"> <t ...
- Good, then we can start