首页 > 其他分享 >CF1270 sol

CF1270 sol

时间:2024-09-24 21:36:49浏览次数:1  
标签:cnt limits text upd sol pos CF1270 mx

题目大意

cf link

给定一个长度为\(n\)的序列\(a\),保证任何时间序列\(a\)两两不同,\(i\)和\(j\)有边当且仅当\(a_i < a_j\)。询问连通块的个数,带单点修。

做法

step 1 观察性质

结论:若\(i,j\)连通,则\(\forall k \in (i, j), i, j\)和\(k\)连通。

$\mathcal{proof} : $ 分讨:

  • \(a_i < a_j\) 这种情况很显然, 若\(a_i < a_k\)则\(i\)一定和\(k\)连通,否则即\(a_i > a_k\),那么\(a_k < a_j\),那么\(k,j\)连通

  • \(a_i > a_j\), 继续分讨:

\(\mathcal{A} : \exist x<i,a_x<a_j<a_i\) : 若\(a_k<a_x,k\)和\(j\)之间有边;否则\(x, k\)有边
\(\mathcal{B} : \exist x>j,a_j<a_i<a_x\) : 若\(a_k>a_x,k\)和\(i\)之间有边;否则\(x, k\)有边

\(\mathcal{Q.E.D}\)

这个没想到。。

问题转化

所以发现每次的计算变成了\(\sum \limits_{pos} [[1, pos]\text{和}[pos + 1, n]\text{没有边}]\)

等价于\(\sum \limits_{pos} [\forall x\in [1, pos], y \in [pos + 1, n], a_x > a_y]\)

还等价于\(\sum \limits_{pos} [\min \limits_{i=1}^{pos} a_i > \max \limits_{i=pos+1}^{n} a_i]\)

套路的,记\(mx =\max\limits_{i=pos+1}^{n} a_i\), 将\(\le mx\)的设为\(0\), 剩下的设为\(1\), 一个\(pos\)会产生贡献当且仅当转化后的\(01\)序列为\(pos\)个\(1\)和\(n - pos\)个\(0\)依次组成的,即:

\[\overset{\text{pos}个1}{\overbrace{1111...1111}}\overset{\text{n-pos}个0}{\overbrace{0000...0000}} \]

记录+维护

我们计\(f_{mx}\)为在\(\text{max}=mx\)的序列的\(10\)的个数。考虑建值域线段树,以\(mx\)为下标建线段树维护\(f_{mx}\)的值。

加入一个数的时候相当于将\([min(a_i,a_{i+1}),max(a_i,a_{i+1})]\)之间的\(f_{mx}++\),因为这些会产生一对\(10\)。

特殊的考虑\(a_0=\infty, a_{n+1}=0\),这样方便处理边界。

然后我们发现\(\forall mx, f_{mx} > 0\),而我们原问题是球有多少个\(f_{mx}=1\)的个数,于是直接转化为区间最小值+维护最小值个数。

code

code

void upd(int x, int v) {change(1, 0, V, Min(a[x], a[x + 1]), Max(a[x], a[x + 1]) - 1, v);}
// in main
	read(n, q); rep(i, 1, n) read(a[i]); a[0] = V + 1, a[n + 1] = 0;
	rep(i, 1, n)chane_cnt(1, 0, V, a[i], 1); rep(i, 0, n) upd(i, 1);
	rep(_, 1, q, x, v) {
		read(x, v); upd(x - 1, -1), upd(x, -1), chane_cnt(1, 0, V, a[x], -1);
		a[x] = v; upd(x - 1, 1), upd(x, 1), chane_cnt(1, 0, V, a[x], 1); writeln(seg[1].cnt);
	}

标签:cnt,limits,text,upd,sol,pos,CF1270,mx
From: https://www.cnblogs.com/georgeyucjr/p/18430032

相关文章

  • SolidJS-每日小知识(9/24)
    对图片指定范围的区域进行填充显示1定义变量,svg和image//用于保存SVG元素的引用const[svgRef,setSvgRef]=createSignal<SVGSVGElement|null>(null);//图像原始尺寸constimageSize={width:11920,height:16850};//裁剪区域constcroppedScope......
  • Count Equation Solutions 题解
    前言题目链接:洛谷;UVA。题意简述求以下方程解的个数:\[a_1x_1-a_2x_2+a_3x_3-a_4x_4+a_5x_5-a_6x_6=0\]其中\(1\leqx_i\leqm\leq10^2\),\(x_i\in\mathbb{Z}\),多测。题目分析把\(a_2,a_4,a_6\)变成其相反数,变成\(\sum\limits_{i=1}^6a......
  • 『Solution of Monster&划艇&烟火表演』
    ABC275FMonster其实就是对凸壳的处理办法显然建立\(B\)的笛卡尔树,设\(f[i,j]\)为树\(i\)操作后最大值\(\lej\)的最小代价。显然离开子树后子树都是整体操作的有\[f[i,j]=\min(f[i,j-1],f[lc,x]+f[rc,y]+\max(\max(x,y)-j,0)\timesB_i)\\\]显然可以优化为:\[\begi......
  • Javascript调试命令——你只会Console.log() ?
    Javascript调试命令——你只会Console.log()?https://segmentfault.com/a/1190000012957199Console对象提供对浏览器控制台的接入(如:Firefox的WebConsole)。不同浏览器上它的工作方式是不一样的,但这里会介绍一些大都会提供的接口特性。Console对象可以在任何全局对象中访问,......
  • 【题解】Solution Set - NOIP2024集训Day36 dp 优化 + 状态设计
    【题解】SolutionSet-NOIP2024集训Day36dp优化+状态设计https://www.becoder.com.cn/contest/5550最后一题较难。「NOIP2023」天天爱打卡考虑dp。\(f_{i,j}\):前\(i\)天,到第\(i\)天为止连续打卡\(j\)天。有转移:\[f_{i,0}=\max(f_{i,j})\\f_{i,j}=\max(f_{i......
  • CF1270H Number of Components 题解
    Description给一个长度为\(n\)的数组\(a\),\(a\)中的元素两两不同。对于每个数对\((i,j)(i<j)\),若\(a_i<a_j\),则让\(i\)向\(j\)连一条边。求图中连通块个数。支持\(q\)次修改数组某个位置的值,每次修改后输出图中连通块个数。\(n,q\le5\times10^5,1\lea_i\le10^......
  • 给 Solidity 开发者的 Starknet 开发指南
    作者:Tiny熊原文链接:给Solidity开发者的Starknet开发指南Starknet是以太坊的二层ZKRollup扩容方案,与兼容EVM的二层扩容方案上的开发不同,Starknet上开发有自己的模式。这篇文章介绍如何开发Starknet上的合约以及如何部署到Starknet测试网上,同时方便Solidi......
  • SOLIDWORKS 2024 基准轴
       ......
  • 小白pycharm踩坑日记之配环境解决ResolvePackageNotFound
    最近开始看专业相关论文并会从GitHub上下载开源代码来调着试试,结果出师不利,将项目导入pytorch,刚上来啥也不懂就想着run起来,问了朋友才知道需要在下配环境,hub给了一条配环境的命令,配后发现不可以后来发现是文件的命名后缀和网页给的不同改后缀之后还是不可以,把vpn关掉也不行,......
  • SOLID 原则使用一些有趣的类比与车辆示例
    solid是计算机编程中五个良好原则(规则)的缩写。solid允许程序员编写更易于理解和稍后更改的代码。solid通常与使用面向对象设计的系统一起使用。让我们使用车辆示例来解释solid原理。想象一下,我们正在设计一个系统来管理不同类型的车辆,例如汽车和电动汽车,以提供运输服务。......