首页 > 其他分享 >CodeForces-765F

CodeForces-765F

时间:2024-08-06 09:50:38浏览次数:10  
标签:pre le 765F CodeForces 不妨 端点 权值 区间

首先,如果你写过P9058的话,应该会想到支配点对这个 trick,我们不妨将此题的套路搬到这套题上.
定义点对 \((i,j),a_i\le a_j\),当 \((i,j)\) 被支配当且仅当存在 \(i<k<j\) 满足 \(a_i\le a_k \le a_j\)。
相应的,一个有效的点对 \((i,j)\),其中 \(i\) 满足 \(i\) 最大且 \(a_i<a_j\)。
我们不妨证明这个结论:
反证法,有 \(a_{pre},a_i \le a_j\),其中 \(pre<i<j\) ,假设 \((pre,j)\) 为有效点对,
点对 \((pre,i)\) 的权值为 \(|a_i-a_{pre}|\),\((pre,j)\) 的权值为 \(a_j-a_{pre}\)。
在之前的证明中,需要满足 \((pre,i)\) 的权值 小于 \((pre,j)\) 的权值才能得证,但是这里却失效了,怎么办呢???
不妨沿着此思路,固定右端点 \(j\),挖掘在区间 \([1,i)\) 这个区间内更优秀的左端点 \(pre\) 所满足的性质。
如果 \(pre\) 这个左端点在区间 \([1,i)\) 中更加优秀,有:\(a_i<a_{pre}<a_j\) 且 \(a_{pre}-a_i>a_j-a_{pre}\),继续考虑在区间 \([1,pre)\) 区间内更加优秀的左端点 \(pre'\),有:\(a_{i}<a_{pre'}<a_{pre}\) 且 \(a_{pre'}-a_{pre}>a_j-a_{pre'}\)。
不妨简化下式子,得:\(2a_{pre}>a_i+a_j\),\(2a_{pre'}>a_{j}+a_{pre}\),发现左端点的权值是以指数级别增加的,那么对于一个右端点最多有 \(log_2V\) 个左端点。
如何实现?

标签:pre,le,765F,CodeForces,不妨,端点,权值,区间
From: https://www.cnblogs.com/smilemask/p/18344553

相关文章

  • Codeforces Round 963 (Div. 2) A - C 详细题解(思路加代码,C++,Python) -- 来自灰名
    比赛链接:Dashboard-CodeforcesRound963(Div.2)-Codeforces之后有实力了再试试后面的题目,现在要做那些题,起码要理解一个多小时题目A:链接:Problem-A-Codeforces题目大意理解:        极少数不考翻译能读懂的cf题目(bushi)每个测试用例第一行一个n,......
  • Codeforces Round 963 (Div. 2) D题解
    CodeforcesRound963D题目描述给定两个正整数n和k以及另一个由n个整数组成的数组a。在一次操作中,可以选择a中大小为k的任意一个子数组,然后将其从数组中删除,而不改变其他元素的顺序。更正式地说,假设(l,r)是对子数组a[l],a[l+1],...,a[r]的操作,使得r-l+1......
  • Codeforces Round 963 (Div. 2) 补题记录(A~D,F1)
    不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.不会做F1.A直接计算每一个选项最多对多少个题加起......
  • Codeforces Round 891 (div.3) D题解析
    CodeForcesRound898(div4)D题.StrongVertices大致思路对于题目的给的式子,au-av>=bu-bv,我们可以通过移项得到au-bu>=av-bv,这样就能够构造出来一个ai-bi的项出来对于构造出来的项,我们可以遍历一遍用数组把每一个项存起来,找到值最大的项,值最大的项所对应的下标就是强顶......
  • Educational Codeforces Round 168 (Rated for Div. 2)-7.30复盘
    A.StrongPassword简单题,找到相同的两个相邻字母之间插一个跟他们不同的大写字母即可inlinevoidsolve(){ cin>>s; intid=0; charhh=''; for(inti=1;i<s.size();i++){ if(s[i-1]==s[i]){ id=i;break; } } for(inti=0;i<26;i++){ if(s[id]!='a'+i&a......
  • Educational Codeforces Round 168 (Rated for Div. 2)
    题目链接:EducationalCodeforcesRound168(RatedforDiv.2)总结:题目较简单,但是发挥很一般。A,B题一直读假题,卡了半个小时;C题用char存int,难绷了。A.StrongPasswordtag:模拟voidsolve(){strings;cin>>s;for(inti=1;i<s.size();i++){......
  • Codeforces Round 891 (Div. 3)
    比赛链接完成度:4/7这场比赛相对于上次那场909div3,题目描述清楚许多(可能是出简单了)。首先是B题,一道模拟四舍五入的题目题目B这题就是简单模拟,我们需要读入一个数字字符串,把他输入到一个数组当中,然后从低位到高位找大于等于5的数,如果找到了,那么之前的数包括这个数都变成0,下一......
  • CodeForces-808#D 题解
    思路分析分析样例1:3132原数组被分成1和32两部分,将2移到左边即可。我们设左边部分的和为\(s1\),右边为\(s2\),可以发现对于任何分割方式,只有满足\(s1\pmx=s2\mpx\)才可以继续讨论答案是否成立。推论1:由于\(x\ina\)(\(a\)为题目所给数列),因此\(|\s1-s2......
  • Codeforces Round 909 (Div. 3)--题目描述无法名状
    好吧,可能是我的文字功底太弱了,首先滴就是这个B题题目链接我一开始还以为这个能排序,就是算排完序之后的最大差,但是仔细一看题目,好像不要求使用排序,于是就尝试暴力做法。我发现的暴力做法是枚举k,直到k==n/2为止,当时是因为没有开longlong导致WA了,后面发现时间不是怎么多就没有......
  • Codeforces Round 962 (Div. 3)
    Abstract第一次打CF的比赛~~~~A.LegsIdea签到题,没什么好说的。Code#include<bits/stdc++.h>usingnamespacestd;intmain(){intt;scanf("%d",&t);while(t--){intn;scanf("%d",&n);int......