当前位置: 首页 > news >正文

【BZOJ1049】 [HAOI2006]数字序列

BZOJ1049 [HAOI2006]数字序列


dp好题?

第一问

第一问我会做!令\(b_i=a_i-i\),求一个最长不下降子序列.

\(n-ans\)就是最终的答案.

第二问

好难啊.不会.挖坑待补.

考虑一下对于一个i~j的可能符合情况,定然存在一个\(k\)在i~k之中为\(a_i\),k~j之中为\(a_j\).

然后就可以dp了.

这个转移比较玄学.如果不随机就GG了.

随机的证明

代码实现

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<queue>
#include<set>
#include<map>
#include<iostream>
using namespace std;
#define ll long long
#define re register
#define file(a) freopen(a".in","r",stdin);freopen(a".out","w",stdout)
inline int gi()
{
    int f=1,sum=0;char ch=getchar();
    while(ch>'9' || ch<'0'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0' && ch<='9'){sum=(sum<<3)+(sum<<1)+ch-'0';ch=getchar();}
    return f*sum;
}
const int N=50010;
int a[N],n,L,cnt,mn[N],f[N],front[N],to[N<<2],nxt[N<<2];
ll g[N],s1[N],s2[N];
int find(int x){
    int l=1,r=L,t=0;
    while(l<=r){
        int mid=(l+r)>>1;
        if(mn[mid]<=x)t=mid,l=mid+1;
        else r=mid-1;
    }
    return t;
}
void dp(){
    memset(mn,127,sizeof(mn));
    mn[0]=-(1<<30);
    for(int i=1;i<=n;i++){
        int q=find(a[i]);
        f[i]=q+1;
        L=max(L,f[i]);
        mn[q+1]=min(mn[q+1],a[i]);
    }
}
void Add(int u,int v){
    to[++cnt]=v;nxt[cnt]=front[u];front[u]=cnt;
}
void solve(){
    for(int i=n;~i;i--){
        Add(f[i],i);
        g[i]=1ll<<60;
    }
    g[0]=0;a[0]=-(1<<30);
    for(int u=1;u<=n;u++)
        for(int i=front[f[u]-1];i;i=nxt[i]){
            int v=to[i];
            if(v>u)break;
            if(a[v]>a[u])continue;
            for(int j=v;j<=u;j++)s1[j]=abs(a[v]-a[j]),s2[j]=abs(a[u]-a[j]);
            for(int j=v+1;j<=u;j++)
                s1[j]+=s1[j-1],s2[j]+=s2[j-1];
            for(int j=v;j<u;j++)
                g[u]=min(g[u],g[v]+s1[j]-s1[v]+s2[u]-s2[j]);
        }
}
int main(){
    n=gi();
    for(int i=1;i<=n;i++)a[i]=gi()-i;
    a[++n]=1<<30;
    dp();solve();
    printf("%d\n%lld\n",n-f[n],g[n]);
    return 0;
}

转载于:https://www.cnblogs.com/mle-world/p/10314664.html

相关文章:

  • 推动“绿色制造” 上海发布新版产业能效指南
  • 关中海关今日揭牌开关
  • 巨头竞赛:AWS和Azure的云区块链服务有何异同?
  • docker 容器无root 权限,如何获得docker容器里面的root权限
  • 一觉睡醒,我的SC存储性能提高了54%?!
  • 【Kyligence 公开课】视频回顾—— Superset设计与SQL查询
  • 设计模式之建造者模式
  • 苹果Q1财报出炉:手机收入下滑15%,服务收入增长19%
  • 2018年全国姓名报告发布:新生儿起名用这50个字最多
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 男子半年两次癫痫病发 救他的居然是同一个民警
  • 腾讯广点通这三年
  • 一个精简的React+Ant Design后台管理系统模版
  • Go 子测试使用说明
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 【面试系列】之二:关于js原型
  • ComponentOne 2017 V2版本正式发布
  • E-HPC支持多队列管理和自动伸缩
  • k8s如何管理Pod
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • Python利用正则抓取网页内容保存到本地
  • React中的“虫洞”——Context
  • 分享几个不错的工具
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 前端攻城师
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 少走弯路,给Java 1~5 年程序员的建议
  • 正则表达式
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • #### go map 底层结构 ####
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (三)模仿学习-Action数据的模仿
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • ***详解账号泄露:全球约1亿用户已泄露
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • .Net各种迷惑命名解释
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2
  • .net下的富文本编辑器FCKeditor的配置方法
  • [ vulhub漏洞复现篇 ] JBOSS AS 4.x以下反序列化远程代码执行漏洞CVE-2017-7504
  • [2024最新教程]地表最强AGI:Claude 3注册账号/登录账号/访问方法,小白教程包教包会
  • [AMQP Connection 127.0.0.1:5672] An unexpected connection driver error occured
  • [Contest20180313]灵大会议
  • [corCTF 2022] CoRJail: From Null Byte Overflow To Docker Escape
  • [HNOI2008]Cards