首页 > 其他分享 >CF1824D LuoTianyi and the Function & 区间历史和模板

CF1824D LuoTianyi and the Function & 区间历史和模板

时间:2023-05-12 18:58:32浏览次数:31  
标签:Function CF1824D le asks LuoTianyi Lmid 区间

LuoTianyi and the Function:

LuoTianyi gives you an array \(a\) of \(n\) integers and the index begins from \(1\) .

Define \(g(i,j)\) as follows:

  • When \(i\le j\), \(g(i,j)\) is the largest integer \(x\) that satisfies \(\{a_p:i\le p\le j\}\subseteq\{a_q:x\le q\le j\}\);
  • When \(i>j\), \(g(i,j)=0\).

There are \(q\) queries. For each query you are given four integers \(l,r,x,y\) , you need to calculate \(\sum\limits_{i=l}^{r}\sum\limits_{j=x}^{y}g(i,j)\) .

DS 题中算非常简单的。扫描 \(g(i,j)\) 的 \(j\) 那一维,用一个 \(set\) 存每种数最后一次出现的位置,维护一棵线段树,其下标 \(i\) 处维护当前 \(j\) 的 \(g(i,j)\)。插入 \(i\) 和删除 \(las_{a_i}\) 变成简单的区间赋值,而区间赋值可以简单转化为区间加。这样当前 \(j\) 的所有 \(g(\cdot,j)\) 就知道了,将询问差分成 \((l,r,1,x-1)\) 和 \((l,r,1,y)\) 即可离线处理,将线段树改为区间历史和线段树即可。

区间历史和 SNIPPET:

//查询普通和时输出 asks,查询当前的历史和时输出 asks+askhs
struct SGT {
	struct node {ll s,hs,a,d,tim;}t[N<<2];
	void chg(int L,int R,ll v,ll tim,int l,int r,int k){
		if(L>R)return;
		if(L<=l&&r<=R){
			t[k].hs+=(tim-t[k].tim)*t[k].s;
			t[k].s+=v*(r-l+1);
			t[k].a+=v;
			t[k].d+=v*tim;
			t[k].tim=tim;
			return;
		}
		int mid=l+r>>1;
		if(L<=mid)chg(L,R,v,tim,l,mid,k<<1);
		if(R>mid)chg(L,R,v,tim,mid+1,r,k<<1|1);
		t[k].hs+=t[k].s*(tim-t[k].tim);
		t[k].s+=v*(min(r,R)-max(l,L)+1);
		t[k].tim=tim;
	}
	ll asks(int L,int R,ll A,int l,int r,int k){
		if(L<=l&&r<=R)return t[k].s+A*(r-l+1);
		int mid=l+r>>1;ll s=0;
		A+=t[k].a;
		if(L<=mid)s+=asks(L,R,A,l,mid,k<<1);
		if(R>mid)s+=asks(L,R,A,mid+1,r,k<<1|1);
		return s;
	}
	ll askhs(int L,int R,ll A,ll D,ll tim,int l,int r,int k){
		if(L<=l&&r<=R)return t[k].hs+A*(r-l+1)*tim-D*(r-l+1)+t[k].s*(tim-t[k].tim);
		int mid=l+r>>1;ll hs=0;
		A+=t[k].a,D+=t[k].d;
		if(L<=mid)hs+=askhs(L,R,A,D,tim,l,mid,k<<1);
		if(R>mid)hs+=askhs(L,R,A,D,tim,mid+1,r,k<<1|1);
		return hs;
	}
}T;

标签:Function,CF1824D,le,asks,LuoTianyi,Lmid,区间
From: https://www.cnblogs.com/impyl/p/17396038.html

相关文章

  • Python range function All In One
    PythonrangefunctionAllInOnerange函数函数语法range(stop)range(start,stop[,step])参数说明:start:计数从start开始。默认是从0开始。例如range(5)等价于range(0,5)stop:计数到stop结束,但不包括stop。例如:range(0,5)是[0,1,2,3,4]没有......
  • 论文阅读 -- High-speed_function_approximation_using_a_minimax_quadratic_interpol
    SFU设计算法基础Interpolation插值:给定有限点预测附近点的方法算法复现requireMaple代码复现精度与资源referenceHigh-SpeedFunctionApproximationminimaxcoeffAitken(埃特金)逐次插值法|一次插值、二次插值、k次插值FPGA_LUT-based_InterpolationF......
  • You may have an infinite update loop in a component render function
    在组件渲染函数中你可能有一个无限更新的循环这就导致页面一直在加载无限循环下去,没有终止,卡死 在 v-for 循环当中,如果用方法或者计算属性对vm.$data的属性进行操作,理论上,可能因为修改到循环对象,诱发无限循环。此时Vue就会发出警告(并不是真的已经无限循环了) ......
  • CF1824A LuoTianYi and the Show
    题意有\(n\)个人、编号为\(1\)至\(m\)的\(m\)个座位与三种坐座位的方式:坐在最左边的人的左边,当\(1\)号座位也不为空时就不坐了,当没有人坐在座位上时坐在\(m\)号座位上;坐在最右边的人的右边,当\(m\)号座位也不为空时就不坐了,当没有人坐在座位上时坐在\(1\)号座......
  • CF1824B2 LuoTianyi and the Floating Islands (Hard Version) - 概率期望 - 树的重心
    题目链接:https://codeforces.com/contest/1824/problem/B2题解:考虑一棵\(n\)个点的树,假如已经选定了\(k\)个特殊点,如何判断某一个点是否为好点?显然将这个点提到根没有影响,那么好点的充要条件是对于所有子树的\(S_u\)值都\(\leqk/2\),这里\(S\)代表\(u\)子树中的特殊......
  • CF1825C LuoTianyi and the Show
    传送门(luogu)传送门(CF)前言我来水题解力简化题意$n$个人,$m$个座位,每个人落座的方法有三种:坐最左边的人的左边,没人的话就做$m$号座位,若最左边的为$1$号,就离开;坐最右边的人的右边,没人的话就做$1$号座位,若最右边的为$m$号,就离开;坐在$x_i$号座位上,有人就......
  • 【Azure 应用服务】Azure JS Function 异步方法中执行SQL查询后,Callback函数中日志无
    问题描述开发AzureJSFunction(NodeJS),使用mssql组件操作数据库。当SQL语句执行完成后,在Callback函数中执行日志输出 context.log("..."),遇见如下错误:Warning:Unexpectedcallto'log'onthecontextobjectafterfunctionexecutionhascompleted.Pleasecheck......
  • Uncaught TypeError: f.__fbeventsModules[a] is not a function at f.__fbeventsM
    UncaughtTypeError:f.__fbeventsModules[a]isnotafunctionatf.__fbeventsModules.f.getFbeventsModules怎么了这个错误通常是因为代码中使用了Facebook的跟踪代码,但是在加载该代码之前,代码中尝试访问跟踪模块。这个错误有几种可能的原因:Facebook跟踪代码没有正......
  • 回调函数(callback function)
    是什么回调函数是一种特殊的函数,它不是在程序中直接调用的,而是由程序在特定事件发生时进行调用的。回调函数通常作为参数传递给其他函数,而这些函数在执行时会将回调函数作为其内部的一部分来调用。为什么解耦.回调函数的好处在于它们可以让程序更加模块化和可扩展。怎......
  • 通过map+Function优化if else
    需求背景在实际项目中,好比在一个简单的订单处理系统,其中订单有不同的状态(比如新建、已支付、已发货、已收货等),为了实现基于状态机的逻辑处理,我们可以通过switch(状态)去对应不同状态的处理逻辑。1publicStringprocess2(){2switch(status){3c......