首页 > 其他分享 >CF1635F 笔记

CF1635F 笔记

时间:2024-03-09 15:55:52浏览次数:16  
标签:结论 le 更优 询问 笔记 CF1635F neq

好题啊。

题意

给定 \(n\) 个二元组 \((x_i, w_i)\),保证 \(x\) 升序。有 \(m\) 个询问 \([l, r]\),对于每个询问求出:

\[\min\limits_{l \le i < j \le r}(x_j - x_i) \cdot (w_i + w_j) \]

题解

一个精妙的结论:

  • 设 \(L_i\) 表示 \(i\) 左边第一个满足 \(w_j \le w_i\) 的 \(j\),\(R_i\) 表示 \(i\) 右边第一个满足 \(w_j \le w_i\) 的 \(j\)。
  • 一个询问的答案的最优 \((i, j)\) 一定在 \((x, R_x)\) 或者 \((L_x, x)\) 处取到。

证明:反证法。假设最优处在 \((i, j)\) 且 \(i \neq L_j \land R_i \neq j\)。那么一定有 \((i, L_j)\) 或者 \((R_i, j)\) 更优,原因如下:
因为 \(w_{L_j} \le w_j\),\((w_i + w_{L_j}) \le (w_i + w_j)\) 并且还有 \((x_{L_j} - x_i) < (x_j - x_i)\)。故乘积更小。
所以 \((i, j)\) 有更优处,与假设矛盾。证毕

于是有了这个结论之后,不难用树状数组维护答案,复杂度 \(O(n \log n)\)。

这道题的结论同样启示我们,对于这种 RMQ 问题(或者取全局最小值的问题),都要尝试思考一下最值在哪些位置取得,这些位置的性质是什么等等。

代码:


标签:结论,le,更优,询问,笔记,CF1635F,neq
From: https://www.cnblogs.com/CTHOOH/p/18062813

相关文章

  • MYSQL学习笔记22: 多表查询
    多表查询单表查询查询emp表select*fromemp;查询dept表select*fromdept;笛卡尔积(全组合)#emp表有4条记录,dept表有6条记录#笛卡尔积有4*6=24条记录select*fromemp,dept;消除无效的笛卡尔积(emp和dept通过dept_id连接)select*fromemp,deptw......
  • 神州笔记本 win11 节能模式 供电不足 自动关机
    刚刚买了一个神州笔记本没几天,用着用着就出现问题了。本人使用电脑有个极为不好的习惯,那就是会一次性打开特别多的应用,然后不关,一直留着,这个习惯虽然不好但也是一直没有啥问题的,不过最近换了个新的笔记本就出现了问题。神州笔记本开启省电模式:之所以开这个模式其实并不是为......
  • P5416 笔记
    前置知识:线段树分治。题意给定\(n\)个节点的树,每个节点有一个二元组集合\(S_i\)。这个集合有一个限制:\(S_i\)一定是\(S_{fa_i}\)中删除一个二元组或者加一个二元组,并且加进来的二元组互不相同。现在有\(m\)个询问,每个询问给出\(k,h\)表示查询\(\min\limits_{(x,c......
  • Java学习笔记——第十天
    面向对象高级(一)staticstatic是一个关键字,义为静态,可以修饰成员变量和成员方法。static修饰成员变量成员变量的分类类变量(静态成员变量):有static修饰的成员变量,它们属于类,在计算机里只有一份,会被类的全部对象共享。实例变量(对象成员变量):无static修饰的成员变量,属于每个对象,每......
  • Living-Dream 系列笔记 第2期
    本期主要讲解vector、map两个STL容器。知识点:首先,引入两种数组的区别:静态数组,指提前声明需要多少内存的数组,是连续的;而动态数组则是在插入元素时临时指定存储空间,不要求连续。STLvector是一个动态数组,下标默认从\(0\)开始。它支持的操作如下:定义:一维vector......
  • Living-Dream 系列笔记 第3期
    本期主要讲解二分查找。知识点二分查找:思想:分治。使用场景:在一个有序序列中,反复查找不同目标。时间复杂度:\(O(n\logn)\)。实现:对数列排序;确定二分边界(通常为L=最小下标-1,R=最大下标+1);伪代码:intL=左边界-1,R=右边界+1;while(L+1<R){intmid=(L+R)......
  • Living-Dream 系列笔记 第1期
    本期主要讲解模拟、枚举算法。例题T1简单模拟题。利用scanf/cin以int形式读入分和秒,并令秒循环累加,逢\(60\)归\(0\)并向分进\(1\),分则是逢\(24\)归\(0\)。在循环的过程中若分秒合起来是回文数字,则退出循环,按照题目格式输出当前时间。注意开始时间不算。#includ......
  • Living-Dream 系列笔记 第17期
    ProblemT1/*思路:分类讨论:若k=0,则输出x+1;若k>tot(x的位数),则输出1+k-tot个0+x;否则输出10^k+x。*/#include<bits/stdc++.h>usingnamespacestd;longlongk,x,tot,ans=1;//开longlongintmain(){ cin>>k>>x; if(k==0){cout<<x+1;return0;}//情况1......
  • Living-Dream 系列笔记 第14期
    本期主要讲解差分技巧。知识点我们令原数组为\(a_i\),则当且仅当\(d_i=a_i-a_{i-1}\)时,我们称\(d_i\)是\(a_i\)的差分数组。特别的,\(d_1=0\),\(d_{n+1}=-n\)。差分数组\(d_i\)有以下三个性质:\(d_i\)的前缀和数组为\(a_i\)。将\(a_{L\simR}\)这个区间统一加......
  • Living-Dream 系列笔记 第15期
    模拟赛爆炸祭。T1把所有连通块依次求出,若某个连通块的数量已经出现过,则说明它与以前的连通块属于同一星系,直接将星系大小加上连通块大小并取\(\max\);否则将星系数量\(+1\)。#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;intn,m;intans=-1e9,num,......