想了很久没弄明白,对于边界的情况还是有问题

等题解出了再看看

然后枚举每个后缀r,找到比它小,并且在其左边的前缀l,那么删<=l,r-1的都可以

最后的二分很迷:要多考虑特殊情况:前缀跑到后缀后面去了,那么在后缀后面加一个x+1,保证前缀必定在后缀前面

#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
using namespace std;
typedef long long LL;
const int N = + ;
int n,x,a[N];
int L[N],R[N];
int pre[N],suf[N]; int main() {
for(int i=;i<N;i++){
L[i]=N,R[i]=;
}
scanf("%d%d",&n,&x);
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
L[a[i]]=min(L[a[i]],i);
R[a[i]]=max(R[a[i]],i);
} int prelen=,suflen=x+;
for(int i=;i<=x;i++){
if(R[i]==)
pre[++prelen]=pre[prelen-];
else {
if(L[i]>pre[prelen])
pre[++prelen]=R[i];
else break;
}
} suf[suflen]=n+;
for(int i=x;i>=;i--){
if(R[i]==){
suf[suflen-]=suf[suflen]; --suflen;
} else {
if (R[i]<suf[suflen]) {
suf[suflen-]=L[i]; --suflen;
} else {
break;
}
}
} LL ans=;
for(int i=x+;i>=max(suflen,);i--) {
// use [i,x]
int lef=,rig=min(i-,prelen)+;
while(rig-lef>){
int mid=(lef+rig)>>;
if(pre[mid]<suf[i]){
lef=mid;
} else {
rig=mid;
}
}
ans=ans+(lef+);
}
cout<<ans<<endl;
}

前缀后缀——cf1167E的更多相关文章

  1. POJ 2752 (KMP 所有可能长度的前缀后缀) Seek the Name, Seek the Fame

    题意: 求一个字符串的相同前缀后缀的所有可能的长度,这里该字符串其本身也算自己的前缀和后缀. 分析: 我们知道next数组的性质是,该字符之前的字符串的最大相同前缀后缀. 既然知道了最大的,即next ...

  2. hdoj 2594 Simpsons’ Hidden Talents 【KMP】【求串的最长公共前缀后缀】

    Simpsons' Hidden Talents Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java ...

  3. 1280 前缀后缀集合(map)

    1280 前缀后缀集合 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 一个数组包含N个正整数,其中有些是重复的.一个前缀后缀集是满足 ...

  4. kuangbin专题七 HDU1540 Tunnel Warfare (前缀后缀线段树)

    During the War of Resistance Against Japan, tunnel warfare was carried out extensively in the vast a ...

  5. jQuery EasyUI/TopJUI基本的数字输入框(保留两位小数,带前缀后缀...)

    jQuery EasyUI/TopJUI基本的数字输入框(保留两位小数,带前缀后缀...) numberbox(数值输入框) HTML required:必填字段,默认为false:prompt:显示 ...

  6. Codeforces Round #320 (Div. 2) [Bayan Thanks-Round] D "Or" Game 枚举+前缀后缀

                                                                            D. "Or" Game       ...

  7. B. Marvolo Gaunt's Ring 前缀后缀

    B. Marvolo Gaunt's Ring 这种一般只有三个的都可以处理前缀和后缀,再枚举中间这个值. 这个和之前写过的C. Four Segments 前缀后缀 处理方式很像. #include ...

  8. FIX_前缀后缀_未提交

    问题 B: FIX 时间限制: 1 Sec  内存限制: 64 MB提交: 38  解决: 11[提交][状态][讨论版] 题目描述 如果单词 X 由单词 Y 的前若干个字母构成,我们称 X 是 Y ...

  9. Simpsons’ Hidden Talents - HDU 2594(求相同的前缀后缀)

    题目大意:给你两个字符串,找出一个最大的子串,这个子串要是前面串的前缀并且是后面串的后缀...........   分析:next的简单运用吧,可以把两个串进行合并,中间加一个不能被匹配的字符,然后求 ...

随机推荐

  1. 【JUC】JDK1.8源码分析之ConcurrentHashMap

    一.前言 最近几天忙着做点别的东西,今天终于有时间分析源码了,看源码感觉很爽,并且发现ConcurrentHashMap在JDK1.8版本与之前的版本在并发控制上存在很大的差别,很有必要进行认真的分析 ...

  2. Git 学习(一)安装 Git

    这里写自定义目录标题 这一章介绍怎么安装 Git 大家都是开发老司机,就不简介什么是 Git 了,直接开花. 在 Linux 上安装Git 在 Windows 上安装 Git 初次使用 Git 前的配 ...

  3. Fedora25安装mariadb并设置权限

    MariaDB版本10.1.21 Fedora版本25 1.Change root user sudo -i 2. dnf install -y mysql dnf install -y mariad ...

  4. 网页设计师神器,快速生成网站配色、字型等风格的工具——Stylify Me

    在设计网页时,最重要的一项便是网页的配色,颜色的使用在网页制作中起着非常关键的作用,不同的网站有着自己不同的风格,也有着自己不同的颜色.今天给大家介绍一个在线生成网站配色的工具——Stylify Me ...

  5. vue项目使用history模式打包应该注意的地方

    1.在config/index.js中将assetsPublicPath原来的’/‘修改为‘./’. build: { env: require('./prod.env'), index: path. ...

  6. css3 动画属性

    transition Internet Explorer 9 以及更早版本的浏览器不支持 transition 属性. Internet Explorer 10.Firefox.Opera 和 Chr ...

  7. SQL语句转换成MapReduce的基本原理

  8. mantis 添加新状态配置方法

    在mantis的状态栏中一般只有:新建.反馈.认可.已确认.已分派.已解决.已关闭,七个选项,如果想在其中加入新的状态怎么做? 我要加入的状态为:重新打开 1.添加状态信息 打开config_defa ...

  9. java运行字符串代码

    本文链接:https://blog.csdn.net/junlong750/article/details/50945883

  10. (组合数学)不定方程的解+猜测——cf997B

    首先要求出三种等价情况 5×1+1×50=1×5+5×105×1+1×50=1×5+5×10 9×5=5×1+4×10 8×5+1×50=9×10   那么可以求出三种关于x5,x10的不可行条件 x ...