贪玩(van)蓝月

本文介绍了针对一道最窄题目描述的解题过程,重点探讨了利用CDQ分治策略解决该问题的思路。通过分析性质,揭示了如何从已知的k个答案序列扩展到k+2个答案序列。文章详细阐述了三种可能的情况,并强调了维护最大值和最小值的重要性。最后,总结了CDQ分治在优化动态规划算法上的应用。
摘要由CSDN通过智能技术生成

题目 

最窄的题目描述。。。

思路&题解

自己的思路

这是不可能有的

正解

首先需要发现一个性质,如果现在已经求出k的答案,那么k+2的答案序列就一定是在k的答案序列中插入两个(可以是末尾与开头) 数所得到,至于为什么,其实我也不知道,那么考虑k+2的转换,考虑CDQ

假设对于k,在区间l-mid选了k1个点,mid+1-r选了k2个点

那么对于k+2,就有一下情况:

1.在区间l-mid选k1+1个点,mid+1-r选k2+1个点

2.在区间l-mid选k1个点,mid+1-r选k2+2个点

3.在区间l-mid选k1+2个点,mid+1-r选k2个点

但是由于它是加减加减的,所以还要维护最大值和最小值

总结

CDQ分治是解决用一个子问题来计算对另一个子问题的贡献的算法,所以这道题可以刚好使用,因此dp也可以用此来优化

代码

#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 3;
int n , a[MAXN] , f[MAXN][23][2];
int w[MAXN][2];
void cdq( int l , int r , int step ){
    if( l == r ) {
        f[l][step][0] = a[l] , f[l][step][1] = a[l];
        return ;
    }
    int mid = ( l + r )>> 1;
    cdq( l , mid , step + 1 );
    cdq( mid + 1 , r , step + 1 );
    for( int i = l ; i <= r ; i ++ )
        f[i][step][1] = 0x3f3f3f3f , f[i][step][0] = -0x3f3f3f3f;
    int k1 = 0 , k2 = 0;
    if( f[l][step+1][0] > f[mid+1][step+1][0] ) f[l][step][0] = f[l][step+1][0] , k1 = 1;
    else f[l][step][0] = f[mid+1][step+1][0] , k2 = 1;
    for( int i = l + 2 ; i <= r ; i += 2 ){
        int k11 , k22 , tmp ;
        if( l + k1 <= mid && mid + k2 + 1 <
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在大学物理课程中,学生需要掌握一定的数学基础和物理知识,而我自认为在这两方面都存在一定的短板。在上学期的学习中,由于学习压力大以及个人贪玩等原因,导致我没有认真对待物理课程,最终导致了挂科和学业预警的出现。 首先,我认为学习压力是导致我挂科和学业预警的主要原因之一。在大学中,学业压力较大,而我没有很好地控制自己的情绪和精力,导致学习效率低下。同时,我也没有学好高中物理课程的基础知识,在理解和掌握新知识时遇到了很多困难。 其次,我在学习中缺少自律和计划性。我没有制定明确的学习计划,也没有做好自我管理。这导致我在学习上没有明确的目标和计划,无法有效地利用时间和资源。 针对这些问题,我制定了以下学习目标规划: 首先,我将加强自己的数学基础。我会花更多的时间去学习数学知识,特别是与物理相关的数学知识,如微积分和线性代数。这将有助于我更好地理解和掌握物理知识。 其次,我将制定有效的学习计划。我会将每周的学习内容分解成小目标,并制定详细的计划,以确保我能够按时完成学习任务。同时,我也会加强自我管理,更好地控制自己的学习状态和情绪。 最后,我将尽可能多地参加物理实验和讲座,以便更好地理解和应用所学知识。我也会积极参加小组讨论和与老师的交流,以便更好地解决自己的问题和加深对知识的理解。 总之,我会通过制定明确的学习目标规划和有效的学习计划来改善自己的学习状态,从而避免学业预警的再次发生。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值