【学习笔记】「JOI Open 2022」长颈鹿

这篇具有很好参考价值的文章主要介绍了【学习笔记】「JOI Open 2022」长颈鹿。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

有点难😅

不难写出 O ( n 3 ) O(n^3) O(n3) D P DP DP,考虑不一样的做法🤔

发现答案和 L I S / L D S LIS/LDS LIS/LDS有关系。如果是左上角/右上角那么加入 L D S LDS LDS,否则加入 L I S LIS LIS,容易发现原序列被拆分成了一个 L I S LIS LIS L D S LDS LDS,因此答案期望不会超过 n \sqrt{n} n

发现可以设 f i , j , k f_{i,j,k} fi,j,k表示以 ( i , p i ) (i,p_i) (i,pi)为矩阵的一角,向 4 4 4个方向,包含 k k k个关键点时正方形边长的最小值。枚举 k − 1 k-1 k1情况下的所有正方形然后转移即可,转移的条件是 k − 1 k-1 k1情况下的矩阵能够被完全包含。有点抽象 这样复杂度 O ( n 2 n ) O(n^2\sqrt{n}) O(n2n )

看起来状态数还是很大😅

使用扫描线+树状数组优化转移,可以做到 O ( n n log ⁡ n ) O(n\sqrt{n}\log n) O(nn logn)

发现我们实际上不用把 8 8 8种情况都讨论完,上下左右四种情况都是对称的,因此将坐标翻转一下就好了。文章来源地址https://www.toymoban.com/news/detail-709059.html

#include<bits/stdc++.h>
#define ll long long
#define pb push_back
#define fi first
#define se second
#define db double
#define ull unsigned long long
#define inf 0x3f3f3f3f
using namespace std;
int n,p[8005],res,f[8005][4],bit[8005];
vector<pair<int,pair<int,int>>>now,nxt;
void add(int &x,int y){
    x=max(x,y);
}
vector<pair<int,pair<int,int>>>v,v2;
bool cmp(pair<int,pair<int,int>>x,pair<int,pair<int,int>>y){
    return x.se.se-x.se.fi<y.se.se-y.se.fi;
}
void add(int x,int y){
    for(;x<=n;x+=x&-x)bit[x]=min(bit[x],y);
}
int query(int x){
    int tot(inf);
    for(;x;x-=x&-x)tot=min(tot,bit[x]);
    return tot;
}
int rev(int x){
    return n-x+1;
}
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
    cin>>n;for(int i=1;i<=n;i++)cin>>p[i];
    for(int i=1;i<=n;i++){
        now.pb({0,{i,p[i]}});
    }res=n-1;
    for(int i=2;;i++){
        nxt.clear();memset(f,0x3f,sizeof f);
        for(int k=0;k<4;k++){
            v.clear(),v2.clear();
            for(int j=1;j<=n;j++){
                int x=(k&1)?j:(n-j+1),y=(k&2)?p[j]:(n-p[j]+1);
                v.pb({j,{x,y}});
            }sort(v.begin(),v.end(),cmp);
            for(auto e:now){
                int l1=e.se.fi,r1=e.se.se,l2=l1+e.fi,r2=r1+e.fi;
                if(!(k&1))l1=rev(l1),l2=rev(l2);if(!(k&2))r1=rev(r1),r2=rev(r2);
                if(l1>l2)swap(l1,l2);if(r1>r2)swap(r1,r2);
                v2.pb({e.fi,{l1,r1}});
            }sort(v2.begin(),v2.end(),cmp);
            memset(bit,0x3f,sizeof bit);
            int it=0;
            for(auto e:v){
                int p=e.fi,x=e.se.fi,y=e.se.se;
                while(it<v2.size()&&v2[it].se.se-v2[it].se.fi<=y-x){
                    add(rev(v2[it].se.se),v2[it].se.fi+v2[it].fi);
                    it++;
                }f[p][k]=min(f[p][k],query(rev(y)-1)-x);
            }
            reverse(v.begin(),v.end()),reverse(v2.begin(),v2.end());
            it=0;memset(bit,0x3f,sizeof bit);
            for(auto e:v){
                int p=e.fi,x=e.se.fi,y=e.se.se;
                while(it<v2.size()&&v2[it].se.se-v2[it].se.fi>=y-x){
                    add(rev(v2[it].se.fi),v2[it].se.se+v2[it].fi);
                    it++;
                }
                f[p][k]=min(f[p][k],query(rev(x)-1)-y);
            }
            for(int j=1;j<=n;j++){
                int l1=j,r1=p[j],l2=((k&1)?f[j][k]:-f[j][k])+l1,r2=((k&2)?f[j][k]:-f[j][k])+r1;
                if(l1>l2)swap(l1,l2);if(r1>r2)swap(r1,r2);
                if(l1>=1&&l2<=n&&r1>=1&&r2<=n){
                    nxt.pb({f[j][k],{l1,r1}});
                }
            }
        }
        if(nxt.size()==0){
            break;
        }
        now=nxt,res=n-i;
    }cout<<res;
}

到了这里,关于【学习笔记】「JOI Open 2022」长颈鹿的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 2022 China Open Source Report

    | 翻译:黄绍雅、岳扬、刘文涛、李思颖 | 编辑:胡欣元 | 设计:胡欣元 As 2022 finally came to an end, we also emerged from the challenging years of the three-year-long COVID pandemic. The new edition of the \\\"China Open Source Annual Report\\\" for the coming year is once again presented to all our friends. We are now at the stage wher

    2024年02月15日
    浏览(47)
  • [Java]JavaWeb学习笔记(动力节点老杜2022)【Javaweb+MVC架构模式完结】

    视频地址:动力节点最新JavaWeb视频教程,javaweb零基础入门到精通IDEA版https://www.bilibili.com/video/BV1Z3411C7NZ?p=1vd_source=93ab990b9131a1b90943874a5448830a 资料链接:https://pan.baidu.com/s/1y-Dm0dGjQQOvARFBmGiG1w?pwd=1234 提取码:1234 【Tomcat服务器版本与支持Java版本的对应关系:https://tomcat.apache.org/whi

    2023年04月09日
    浏览(236)
  • joi:定义多个自定义错误信息

    目录 前言 原始版 基础错误版 复杂版 简单版 在项目中,提交表单进行字段验证是必不可少的,在node项目中,自己写if else判断非常的繁琐,也不好进行维护,所以我们通常都会引入第三方包joi,来帮助我们进行表单字段的验证。 于是我写下了以下代码: 当然,验证是通过的

    2024年02月11日
    浏览(24)
  • 【2022吴恩达机器学习课程视频翻译笔记】3.2线性回归模型-part-2

    Let’s look in this video at the process of how supervised learning works. Supervised learning algorithm will input a dataset and then what exactly does it do and what does it output? Let’s find out in this video. Recall that a training set in supervised learning includes both the input features, such as the size of the house and also the output targets,

    2024年02月12日
    浏览(35)
  • Qt6.5.1+WebRTC学习笔记(十)开发环境搭建(win10+vs2022)

    1.操作系统win10 64位 2.合理的上网方式,需要正常访问google,最好有40G以上流量 3.安装VS2022,笔者使用的是社区版,并选中C++相关,笔者设置如下        注意,win10的sdk需要是10.0.22621.0,其他版本可能导致编译不通过,而且这个版本会根据webrtc源码的更新而发生变化  4.安装

    2024年02月08日
    浏览(51)
  • 2022微信小程序填充昵称头像 open-type=“chooseAvatar“

    2021年7月份之后,微信开始加强对微信用户个人信息的安全防控,收回了相关服务端接口。微信后面也推出了前端填写昵称头像的方法。 官方代码如下: 最终页面效果:    但是,这个是对小程序基础库以及微信客户端版本有要求的。 目前测试, 微信小程序基础库要在2.2

    2024年02月09日
    浏览(46)
  • CVPR 2022 Image Dehazing Transformer with Transmission-Aware 3D Position Embedding 个人学习笔记

    源码下载: CVPR2022ImageDehazingTransformerwithTransmission-Aware3D代码-深度学习文档类资源-CSDN下载 Abstract 尽管卷积神经网络(CNNs)的单图像去模糊已经取得了良好的进展,但卷积固有的 等方差 和 局部性 仍然是去雾性能的 瓶颈 。虽然 Transformer 占据了各种计算机视觉任务,但直接利

    2023年04月08日
    浏览(48)
  • 特征融合篇 | YOLOv8 引入长颈特征融合网络 Giraffe FPN

    在本报告中,我们介绍了一种名为DAMO-YOLO的快速而准确的目标检测方法,其性能优于现有的YOLO系列。DAMO-YOLO是在YOLO的基础上通过引入一些新技术而扩展的,这些技术包括神经架构搜索(NAS)、高效的重参数化广义FPN(RepGFPN)、带有AlignedOTA标签分配的轻量级头部以及蒸馏增强

    2024年01月22日
    浏览(56)
  • CiteScore 2022正式发布,AI Open首获即达22.5分,三大高被引论文值得一看

    当前,由 ChatGPT、Stable Diffusion 等 AI 大模型掀起的新一轮科技浪潮,正在引领各个行业的变革性发展。及时、深入、全面地了解 AI 行业的前沿动态,有助于我们跟上 AI 行业的发展步伐,抓住时代机遇。 一本学术期刊的高影响力,来自无数投稿人和期刊背后工作者的共同努力

    2024年02月08日
    浏览(34)
  • open mp笔记

    Open mp在cpu上并行计算, 统一内存访问(OPEN MP pthreads),同一块内存共享多个CPU 非统一内存访问(MPI),每个CPU都有自己对应的内存,通过blus interconnect链接起来,cpu不能直接访问他们的内存,需要进行通信才可以访问到他们所属的memory, OPEN MP pthreads他们都是针对共享内存编程的

    2024年02月06日
    浏览(22)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包