题目

$ n $ 个数 $ E_i $ ,$ F(i) $ 表示对1-i的数任意排列 $ p $ ,初始 $ X=0 $ ,依次执行:

  • \(X \lt E_{p_j} \ , \ X++\)
  • $X \gt E_{p_j} \ , \ X-- $
  • \(X = E_{p_j} ,X不变\)

能够得到的最大值,求F(1)~F(n)

$1 \le n \le 5\times 10^5\ , \ -10^5 \le E_i \le 10^5 $

题解

  • 可以证明,最优的\(p\)是E的升序

  • 对于确定的序列,X一定是先一直-1,再+1或者不变,设分界点值为\(pos\)

  • solve 1:

    如果出现了相同的数字,我们可以换成不相同的递增数列,例如:

    2 2 2 2 <=> -1 0 1 2

    由于E是升序排的,这对答案没有影响

    考虑增量的时候用并查集维护可以放的位置

    需要维护\(pos\)和在它前面的数的个数\(rk\)

    答案是:$ i - 2*rk - [pos+rk=0] $

    具体:\(pos\)是第一个满足\(pos + rk \ge 0\) 的值

    由于\(rk\)每次最多++,所以每次加入\(i\)只需要检查一下\(-rk'+1\)和\(E_i\)是否合法

    代码不能再短了QAQ

    #include<bits/stdc++.h>
    using namespace std;
    const int N=2000010,B=1000000;
    int n,E[N],f[N],vis[N];
    int find(int x){return f[x]==x?x:f[x]=find(f[x]);}
    int main(){
    freopen("ni.in","r",stdin);
    freopen("ni.out","w",stdout);
    scanf("%d",&n);
    for(int i=-B;i<=B;++i)f[i+B]=i+B;
    int pos=B,rk=0;
    for(int i=1,x;i<=n;++i){
    scanf("%d",&x);
    x=find(x+B)-B;
    f[x+B]=f[x+B-1];
    vis[x+B]=1;
    if(x<pos){
    rk++;
    if(x>=-rk+1)pos=x,rk--;
    else if(-rk+1<pos&&vis[-rk+1+B])pos=-rk+1,rk--;
    }
    int ans=i-2*rk-(rk+pos==0);
    printf("%d\n",ans);
    }
    return 0;
    }
  • sol 2

这是ljz写的解法二

【JZOJ6228】【20190621】ni的更多相关文章

  1. 【模拟题(电子科大MaxKU)】解题报告【树形问题】【矩阵乘法】【快速幂】【数论】

    目录: 1:一道简单题[树形问题](Bzoj 1827 奶牛大集会) 2:一道更简单题[矩阵乘法][快速幂] 3:最简单题[技巧] 话说这些题目的名字也是够了.... 题目: 1.一道简单题 时间1s ...

  2. 【BZOJ】【1024】【SCOI2009】生日快乐

    枚举 想到以后一秒钟变水题…… 一开始我想:这不是可以随便切吗……但是突然想到:第一刀,必须切在n等分点上!因为要求最后每块的大小相等,那么同理,比如总共要切成7块,第一刀切成了$\frac{3}{7 ...

  3. 【BZOJ】【2194】快速傅里叶之二

    FFT c[k]=sigma a[i]*b[i-k] 这个形式不好搞…… 而我们熟悉的卷积的形式是这样的 c[k]=sigma a[i]*b[k-i]也就是[下标之和是定值] 所以我们将a数组反转一下 ...

  4. 【BZOJ4650】【NOI2016】优秀的拆分(后缀数组)

    [BZOJ4650][NOI2016]优秀的拆分(后缀数组) 题面 BZOJ Uoj 题解 如果我们知道以某个位置为开始/结尾的\(AA\)串的个数 那就直接做一下乘法就好 这个怎么求? 枚举一个位置 ...

  5. 【BZOJ4827】【HNOI2017】礼物(FFT)

    [BZOJ4827][HNOI2017]礼物(FFT) 题面 Description 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手 环,一个留给自己,一 个送给她.每 ...

  6. 【弱省胡策】Round #5 Count

    [弱省胡策]Round #5 Count 太神仙了. \(DP\)做法 设\(f_{n,m,d,k}\)表示\(n*m\)的矩阵,填入第\(k\)个颜色,并且第\(k\)个颜色最少的一列上有\(d\) ...

  7. 【BZOJ5416】【NOI2018】冒泡排序(动态规划)

    [BZOJ5416][NOI2018]冒泡排序(动态规划) 题面 BZOJ 洛谷 UOJ 题解 考场推出了就是两个上升子序列,并且最长下降子序列长度不超过\(2\)...然后大力暴力状压\(dp\)混 ...

  8. LightOJ 1030 【概率DP求期望】

    借鉴自:https://www.cnblogs.com/keyboarder-zsq/p/6216762.html 题意:n个格子,每个格子有一个值.从1开始,每次扔6个面的骰子,扔出几点就往前几步, ...

  9. 【codeforces】【比赛题解】#915 Educational CF Round 36

    虽然最近打了很多场CF,也涨了很多分,但是好久没写CF的题解了. 前几次刚刚紫名的CF,太伤感情了,一下子就掉下来了,不懂你们Div.1. 珂学的那场我只做了第一题……悲伤. 这次的Education ...

  10. 【BZOJ】【3170】【TJOI2103】松鼠聚会

    切比雪夫距离+曼哈顿距离 题解:http://www.cnblogs.com/zyfzyf/p/4105456.html 其实应该先做这题再做[BZOJ][3210]花神的浇花集会的吧…… 我们发现d ...

随机推荐

  1. An Illustrated Proof of the CAP Theorem

    An Illustrated Proof of the CAP Theorem The CAP Theorem is a fundamental theorem in distributed syst ...

  2. XML和Json的特点

    Xml特点: 1.有且只有一个根节点: 2.数据传输的载体 3.所有的标签都需要自定义 4.是纯文本文件 Json(JavaScript Object Notation)特点: json分为两种格式: ...

  3. That IP address can't be assigned to.的问题

    That IP address can't be assigned to. 烦恼了很久,现在知道了,解决的办法如下 首先确定端口号是不是开放,阿里云的直接在控制台修改 其次 看看 你的地址是不是输入错 ...

  4. NSMutableArray 删除可变数组元素

    平时使用 NSMutableArray 中经常用到遍历删除数组元素的问题.一般第一个想法是使用一下 forin 就解决了,但是老司机都会知道使用 forin 做删除操作的时候会 crash.报错的原因 ...

  5. MySQL计算相邻两行某列差值的方法

    简述 博主最近因工作任务缠身,都无暇顾及到我的这片自留地了.前段时间稍有空闲,花了较多的精力学习<啊哈算法>,从中学习到很多之前没有太注重的内容,收益颇丰.但是这些算法题目还没有看完,等后 ...

  6. JDBC模糊查询的4种方式

    1:%放在占位符中              parameters.add("%"+familyMemberQueryBean.getFullName()+"%" ...

  7. Django:RestFramework之-------渲染器

    12.渲染器 from rest_framework.renderers import JSONRenderer,BrowsableAPIRenderer,AdminRenderer class Te ...

  8. Linux应用与端口

    lsof -i:port --- 得到对应端口的应用pid PS -ef|grep pid --- 根据pid得到对应应用

  9. 03-JavaScript语法介绍

    本篇主要关于原生JavaScript的介绍,其中包括其嵌入HTML页面方式,JavaScript的语法结构,以及贪吃蛇案例: 一.绪论 JavaScript是运行在浏览器端的脚步语言,JavaScri ...

  10. CentOS安装MySQL8.x

    MySQL的安装 (4,5,6可省略) 声明:CentOS版本为7.6,安装的MySQL版本为8.0.17 1. 首先要卸载掉本机自带的mysql相关,包括MariaDB. rpm -pa | gre ...