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

CodeForces - 765F

时间:2024-08-06 14:17:44浏览次数:10  
标签:pre 支配 765F 更优 CodeForces 权值

不妨套用P9058的套路,记点对 \((i,j),a_i \ge a_j\) 被支配当且仅当存在 \(i<k<j\),满足\(a_i \ge a_k \ge a_j\) ,同样,猜测对于\(i\),不被支配的点对 \((k,i)\) 只满足 \(k<i\) 最大且 \(a_k>a_i\)。

证明不妨使用反证法,记 \(pre\),满足 \(pre<j<i\) 且 \(a_{pre},a_j>a_i\),假设 \((pre,i)\) 不被支配。

由上得:\((pre,j)\) 权值为 \(|a_j-a_{pre}|\),\((j,i)\) 权值为 \(a_j-a_i\),\((pre,i)\) 权值为 \(a_{pre}-a_i\)。

结论得证的条件是 \((pre,i)\) 被支配,此时却无法确定了,所以结论实际上是不成立的。

我们不妨沿此思路继续想下去,发掘满足条件的 \(pre\) 的性质。

考虑固定 \(i\),首先上述的点对 \((k,i)\) 一定是不被支配的,在区间 \([1,k)\) 中,记 \(pre\) 为 \((pre,i)\) 比 \((k,i)\) 更优的位置,满足 \(pre<k,a_i<a_{pre}<a_k\)

要想不被支配,要满足在 区间 \([pre,i]\) 中没有更优的左端点且不被 \((pre,k)\) 支配,条件有:

\[a_{k}-a_{pre}>a_{pre}-a_i \]

整理得:

\[a_i<a_{pre}<\frac{a_i+a_k}{2} \]

继续找下去,发现每次值域减半,得出结:对于 \(i\),最多只有 \(log V\) 个有效的左端点。

对于点对 \((i,j),a_i\le a_j\) 同理。

上述过程可使用可持久化权值线段树维护,统计答案二维数点,总复杂度 \(O(nlogVlogn+mlogn)\)

标签:pre,支配,765F,更优,CodeForces,权值
From: https://www.cnblogs.com/smilemask/p/18345037

相关文章

  • Codeforces Round 963 (Div. 2)
    A.QuestionMarks题目大意有4n道题,每道题有4个选项,且正确答案中每个选项各占有n个。给定一个字符串s,s中ABCD分别代表4个选项,?代表放弃这道题,求可能的最大正确数解题思路统计每个选项的出现次数,假设每次选的都对,即ans+=min(x,n)点击查看代码#include<bits/stdc++.h>usi......
  • Codeforces Round 963 (Div. 2)
    CodeforcesRound963(Div.2)A对A,B,C,D的数量和\(n\)取个\(\min\)相加B只有奇数或只有偶数答案为\(0\),否则,只能把所有的偶数改为奇数,因为不可能把所有奇数改为偶数。然后就是改的大小问题了。考虑找到最大的奇数,然后把偶数从小到大依次修改。C显然对\(2k\)......
  • Educational Codeforces Round 168 (Rated for Div. 2)
    没有时间参赛直接补几道简单题吧~B.MakeThreeRegions题意:给一个2行的字符串,有block和其他东西,问把一个位置变成block让联通的部分变成3个部分,有多少种方法思路:找规律,找所哟符合条件的块即可voidsolve(){ intn; cin>>n; array<string,2>s; cin>>s[0]>>s[1];......
  • CodeForces-765F
    首先,如果你写过P9058的话,应该会想到支配点对这个trick,我们不妨将此题的套路搬到这套题上.定义点对\((i,j),a_i\lea_j\),当\((i,j)\)被支配当且仅当存在\(i<k<j\)满足\(a_i\lea_k\lea_j\)。相应的,一个有效的点对\((i,j)\),其中\(i\)满足\(i\)最大且\(a_i<a_j\)。......
  • 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++){......