NOIP2024模拟12:孤帆远影

听了机房同学的讨论,于是T1死磕冒泡和逆序对做法。最后只得了40pts。

思想对了,但不是自己的做法。

还是要坚持自己想,坚持自己可以想出来,不要被任何人带偏。

T1

  • 一句话题意:将一个已知序列通过不断“交换相邻位置”的操作调整成不严格单峰状态,问最小的操作次数。

  • 有一种猜想是只要钦定了峰顶的位置,那么左右两边是不会交叉的。

    • 但这个猜想是错误的,它的证伪可以通过正解来理解
  • 正解:假设题目要求我们调成升序,那么答案就是逆序对的数量。

  • 现在是什么呢?要求前半段升序后半段降序。

  • 那就分开逆序对!

  • 具体来说,对于第 \(i\) 个数,想要待在左区间, 就必须穿过左边比它大的每个数,即在它左边的逆序对数量,待在右区间同理.

  • 由于峰顶的位置不做限制,所以我们只需要看每个数放左边移动步数少一点,还是放右边少一点,就行了.

  • 用树状数组求逆序对即可,只不过是正着倒着各扫一遍.

  • 所以此题我很早就陷入了一个误区:枚举峰顶的位置,想来这其实不是题目所求.把自己限制住了!

    • 下次考试应该先在草稿本上写出这个想法.尝试一段时间返回去检查自己的思想是不是除了问题的时候,就方便大胆地走出误区.

    时间复杂度 \(O(N log N)\)

    #include<bits/stdc++.h>
    #define F(i,l,r) for(int i(l);i<=r;++i)
    #define G(i,r,l) for(int i(r);i>=l;--i)
    #define int long long
    #define lowbit(x) (-x&x)
    using namespace std;
    using ll = long long;
    const int N=2e5+5;
    int n,pos=0,mx=0;
    ll L[N],R[N],ans=0;
    ll a[N],tr[N];
    void add(int x){
    for(;x<=mx;x+=lowbit(x)) tr[x]++;
    }
    int ask(int x){
    int res=0;
    for(;x>=1;x-=lowbit(x)) res+=tr[x];
    return res;
    }
    signed main(){
    //freopen("inde.in","r",stdin);
    //freopen("inde.out","w",stdout);
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    cin>>n;
    F(i,1,n) cin>>a[i],mx=max(mx,a[i]);
    F(i,1,n){
    add(a[i]);
    L[i]=i-ask(a[i]);
    }memset(tr,0,sizeof(tr));
    G(i,n,1){
    add(a[i]);
    R[i]=n-i+1-ask(a[i]);
    }
    F(i,1,n){//the fjx
    ans+=min(L[i],R[i]);
    }
    cout<<ans;
    return 0;
    }

T2

  • 一句话题意:给定一个起点,你现在需要依次抵达 \(n\) 个目标区间,既可以亲自去,也可以请别人代劳,但花费都是起终点之间的距离(允许亲自走一半再代劳一半).问最少的花费.

  • 有点儿抽象,还没有完全理解,尝试着解释一下:

  • 记 \(f[i][j]\) 表示第 \(i\) 次游历最终到达 \(j\) 的最小花费.

    • 首先从 \(f[i-1]\) 继承dp值
    • 对于操作1: \(j\) 离 \([l_i,r_i]\) 的最近距离即为此部分贡献.
    • 对于操作2:用 \(f[i][j]+1\) 更新 \(f[i][j-1]\) 和 \(f[i][j+1]\)
  • 最关键的一步:根据操作2,对于每个 \(i\), 将 \(f[i][j]\) 看成关于 \(j\) 的函数,则一定长这个样子:

  • 转移时,维护中间平的那一段,最后得到的贡献一定就是最优的.(感性理解一下)

  • 时间复杂度 \(O(N)\)

    #include<bits/stdc++.h>
    #define F(i,l,r) for(int i(l);i<=r;++i)
    #define G(i,r,l) for(int i(r);i>=l;--i)
    #define int long long
    using namespace std;
    using ll = long long;
    const int N=5e5+105;
    int n,x;
    signed main(){
    // freopen("festival.in","r",stdin);
    // freopen("festival.out","w",stdout);
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    cin>>n>>x; int l=x,r=x,L,R;
    ll ans=0;
    while(n--){
    cin>>L>>R;
    if(l<=R && L<=r){
    if(L>l) l=L;
    if(R<r) r=R;
    }
    if(R<l) ans+=l-R,r=l,l=R;
    if(L>r) ans+=L-r,l=r,r=L;
    }
    cout<<ans;
    return 0;
    }

T3

  • \(O(NlogN)\) 求\(LIS\) 的板题,只不过带了个系数而已.

  • 理解:\(C_i\)的系数只影响后续 \(C_{i+1}\) 的判断,而不影响当前判断.

  • 唯一的细节就是带系数之后的数不一定比原来小,要取 min.

    #include<bits/stdc++.h>
    #define F(i,l,r) for(int i(l);i<=r;++i)
    #define G(i,r,l) for(int i(r);i>=l;--i)
    #define lowbit(x) (-x&x)
    #define int long long
    using namespace std;
    using ll = long long;
    const int N=1e6+5;
    int f[N],a[N],b[N];
    int n;
    signed main(){
    //freopen("geranium.in","r",stdin);
    //freopen("geranium.out","w",stdout);
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    cin>>n;
    F(i,1,n) cin>>a[i];
    F(i,1,n) cin>>b[i];
    int ans=0;
    F(i,1,n) f[i]=2e18;
    F(i,1,n){
    int pos=lower_bound(f+1,f+ans+1,a[i])-f;
    f[pos]=min(f[pos],a[i]*b[pos]);
    ans=max(ans,pos);
    }
    cout<<ans<<"\n";
    return 0;
    }

NOIP2024模拟12:孤帆远影的更多相关文章

  1. noip模拟12[简单的区间·简单的玄学·简单的填数]

    noip模拟12 solutions 这次考试靠的还是比较好的,但是还是有不好的地方, 为啥嘞??因为我觉得我排列组合好像白学了诶,文化课都忘记了 正难则反!!!!!!!! 害没关系啦,一共拿到了\( ...

  2. Noip模拟12 2021.7.12

    T1 interval 亏得昨天晚上改掉了T3并且理解了单调栈,今天一扫这题目就知道要用啥了. 先预处理出以a[i]为最大值的最大左右区间.然后再将a[i]取%!!!是的,要不然会影响单调栈的使用.. ...

  3. HTTP协议请求方式: 中GET、POST和HEAD的介绍_孤帆一叶

    HTTP协议中GET.POST和HEAD的介绍 2008-05-10 14:15 GET: 请求指定的页面信息,并返回实体主体.HEAD: 只请求页面的首部.POST: 请求服务器接受所指定的文档作为 ...

  4. NOIP模拟12

    也算是最近几次比较水的一次吧. 考试时看T1像个打表找规律的题,扔了,去看T2,带修莫队??不会,完戏.看了T3,我决定还是去看T1. 看着T1,我突然发现T2是个大水题:主席树就行,不带修,修改时只 ...

  5. 【JZOJ4910】【NOIP2017模拟12.3】子串

    题目描述 数据范围 =w= 暴力: 从前往后枚举一个i,再从前往后枚举一个j: 如果s[i]不是s[j]的子串,更新答案,继续枚举: 如果s[i]是s[j]的子串,停止枚举. 因为对于s[k] (k& ...

  6. [考试总结]noip模拟12

    菜 今天总体来说 菜爆了,打了 \(3\) 个暴力,没有一个是正解,并且每一个分数都低得要命... 主要还是太菜了... 第一题开题发现和昨天 \(T3\) 一样,然而因为还没学可持久化数据结构就咕掉 ...

  7. NOIP 模拟 $12\; \text{简单的区间}$

    题解 签到题 求区间和为 \(k\) 的倍数的区间,我们可以转化为求左右两个端点,其前缀和相等 对于区间最大值,我们可以把其转化为一个值,它能向左,向右扩展的最远边界,一个单调栈即可 我们设一个值 \ ...

  8. jzoj4918. 【GDOI2017模拟12.9】最近公共祖先 (树链剖分+线段树)

    题面 题解 首先,点变黑的过程是不可逆的,黑化了就再也洗不白了 其次,对于\(v\)的祖先\(rt\),\(rt\)能用来更新答案当且仅当\(sz_{rt}>sz_{x}\),其中\(sz\)表 ...

  9. jzoj4915. 【GDOI2017模拟12.9】最长不下降子序列 (数列)

    题面 题解 调了好几个小时啊--话说我考试的时候脑子里到底在想啥-- 首先,这个数列肯定是有循环节的,而且循环节的长度\(T\)不会超过\(D\) 那么就可以把数列分成三份,\(L+S+R\),其中\ ...

  10. jzoj4916. 【GDOI2017模拟12.9】完全背包问题 (背包+最短路)

    题面 题解 考场上蠢了--这么简单的东西都想不到-- 首先排序加去重. 先来考虑一下,形如 \[a_1x_1+a_2x_2+...a_nx_n=w,a_1<a_2<...<a_n,x ...

随机推荐

  1. ollama搭建本地ai大模型并应用调用

    1.下载ollama 1)https://ollama.com 进入网址,点击download下载2)下载后直接安装即可. 2.启动配置模型 默认是启动cmd窗口直接输入 1 ollama run l ...

  2. 关于Arrays.asList返回List无法新增和删除?

    关于Arrays.asList返回的List无法新增和删除? 这个是在写项目的时候发现的,然后就分析了一下源码,得其内部原理 复现代码示例: public class ArraysAsList { p ...

  3. LaTeX 编译中文文档

    介绍 LaTeX 原生不支持中文.为了添加中文的功能,我们需要引入宏包.XeLaTeX 原生支持中文.不过由于默认使用的字体是英文字体,我们需要设置中文字体之后才能用.不过由于一些原因,在使用 LaT ...

  4. 一个.NET开源、免费的跨平台物联网网关

    前言 今天大姚给大家分享一个基于.NET开源.免费的跨平台物联网网关:IoTGateway. 项目介绍 IoTGateway是一个基于.NET6的跨平台物联网网关.通过可视化配置,轻松的连接到你的任何 ...

  5. CentOS 7 yum无法使用解决方法Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=

    在centos7中使用yum命令时候报错: Loading mirror speeds from cached hostfile Could not retrieve mirrorlist http: ...

  6. OpenTelemetry 实战:gRPC 监控的实现原理

    前言 最近在给 opentelemetry-java-instrumentation 提交了一个 PR,是关于给 gRPC 新增四个 metrics: rpc.client.request.size: ...

  7. mysql修改编码utf8

    摘要:使用apt-get 命令安装的mysql默认不是utf8.在这里记录一下如何将编码修改成utf8. Linux学习笔记之--ubuntu中mysql修改编码utf8 一:查看mysql版本 1. ...

  8. CodeMaid:一款基于.NET开发的Visual Studio代码简化和整理实用插件

    前言 今天大姚给大家分享一款由.NET开源.免费.强大的Visual Studio代码简化.整理.格式化实用插件:CodeMaid. 工具介绍 CodeMaid是一款由.NET开源.免费.强大的Vis ...

  9. 利用 Page Visibility API 优化网页性能与用户体验

    在现代 Web 开发中,用户可能会频繁切换标签页,或让网页处于后台运行.为了避免不必要的资源浪费并提升用户体验,合理利用 Page Visibility API 可以在页面不可见时暂停或减少资源的消耗 ...

  10. IT运维工单高效协同,助力打造一站式运维方案

    随着经济全球化的发展趋势,信息系统在企业运营中占据着愈发重要的位置.业务系统越来越多,用户对信息系统的依赖性越来越强,关键业务系统的中断都将导致企业业务.服务的中断,极大的影响了企业业务稳定运行和持续 ...