首页 > 其他分享 > [THUPC2022 决赛] rsraogps

[THUPC2022 决赛] rsraogps

时间:2023-09-04 16:35:19浏览次数:37  
标签:决赛 dots le 前缀 int rsraogps ch 版本 THUPC2022

[THUPC2022 决赛] rsraogps

题目描述

给序列 \(a_1,\dots,a_n\),\(b_1,\dots,b_n\),\(c_1,\dots,c_n\),

定义区间 \([l,r]\) 的价值为 \(a_l,\dots,a_r\) 按位与,\(b_l,\dots,b_r\) 按位或,\(c_l,\dots,c_r\) 的最大公因数,这三者的乘积;

\(m\) 次查询,每次查询给出区间 \([l,r]\),查询满足 \(l\le l'\le r'\le r\) 的 \([l',r']\) 的价值之和。

提示

\(1\le n\le 10^6\)

\(1\le m\le 5\times 10^6\)

\(1\le a_i,b_i,c_i\le n\)

\(1\le l\le r\le n\)

建议使用高效的输入输出方式。

考虑扫描线,当 \(r\) 固定后,维护 \(w_l=[l,r]\) 的价值。

发现对于一个 \(w_i\),他最多会改变 \(\log n\) 次,因为或,与,gcd 都是至多变动 \(\log n\) 次的。

而且 \(w_i\) 会改变的一定是一段后缀,而扫描线下来后,我们要求 \(w\) 的历史版本和 的区间和。

像吉司机线段树一样维护一个 \(t_i\) 表示 \(w_i\) 上一次改变时间是什么时候,以及这一个版本前的历史版本和 的前缀和。

由于改变的是后缀,我们可以直接修改前缀和,询问时用前缀和回答。

维护除了之前版本的历史版本和,还要维护当前版本的历史版本和,也就是 \(\sum_{j=l}^r(i-t_j+1)w_j\),维护 \(t_jw_j\) 的前缀和和 \(w_j\) 的前缀和即可。

#include<bits/stdc++.h>
using namespace std;
#define int unsigned
const int N=1e6+5;
vector<int>qr[N];
int l[N*5],ans[N*5],a[N],b[N],c[N],d[N],f[N],g[N],h[N],n,m,t[N];
int gcd(int x,int y)
{
	if(!y)
		return x;
	return gcd(y,x%y);
}
int read()
{
	int s=0;
	char ch=getchar();
	while(ch<'0'||ch>'9')
		ch=getchar();
	while(ch>='0'&&ch<='9')
		s=s*10+ch-48,ch=getchar();
	return s;
}
signed main()
{
	n=read(),m=read();
	for(int i=1;i<=n;i++)
		a[i]=read();
	for(int i=1;i<=n;i++)
		b[i]=read();
	for(int i=1;i<=n;i++)
		c[i]=read(),t[i]=1;
	for(int i=1;i<=m;i++)
		l[i]=read(),qr[read()].push_back(i);
	for(int i=1;i<=n;i++)
	{
		int ls=0;
		for(int j=i-1;j;j--)
		{
			if((a[j]&a[i])==a[j]&&(b[j]|b[i])==b[j]&&c[i]%c[j]==0)
				ls=j,j=1;
		}
		for(int j=ls+1;j<=i;j++)
		{
			if(j^i)
			{
				f[j]+=(i-t[j])*a[j]*b[j]*c[j];
				a[j]&=a[i];
				b[j]|=b[i];
				c[j]=gcd(c[j],c[i]);
			}
			g[j]=g[j-1]+f[j];
			h[j]=h[j-1]+a[j]*b[j]*c[j];
			d[j]=d[j-1]+(t[j]=i)*a[j]*b[j]*c[j];
		}
		for(int j=0;j<qr[i].size();j++)
		{
			int l=::l[qr[i][j]];
			ans[qr[i][j]]=g[i]-g[l-1]+(i+1)*(h[i]-h[l-1])-d[i]+d[l-1];
		}
	}
	for(int i=1;i<=m;i++)
		printf("%u\n",ans[i]);
}

标签:决赛,dots,le,前缀,int,rsraogps,ch,版本,THUPC2022
From: https://www.cnblogs.com/mekoszc/p/17677432.html

相关文章

  • 绝对赢家!晋级美国公开杯决赛,梅西将冲击生涯第45冠!
    美国公开杯半决赛,迈阿密国际战胜辛辛那提FC,晋级决赛。迈阿密国际决赛的对手是休斯顿迪纳摩vs皇家盐湖城的胜者,决赛将于9月27日上演。梅西届时也将冲击生涯第45座冠军。梅西目前已经获得了44座冠军,位居历史第一。......
  • [THUPC2022 初赛] 造计算机
    题目传送门更好的阅读体验思路结论:如果序列原先就合法,答案为\(0\);否则,最多使用两个寄存器。我们对\(i\rightarrowa_i\)建边得到若干个环,我们单独考虑一个环如何操作。对于一个长度为\(4\)的数列,再包含两个寄存器,设两个寄存器的值分别为\(x,y\)。显然\(4,1,3\)......
  • 相约天津!全国智能汽车竞赛百度创意组总决赛通知
    “全国大学生智能汽车竞赛”是教育部倡导的大学生科技A类竞赛,中国高等教育学会将其列为含金量最高的大学生竞赛之一,为《全国普通高校大学生竞赛排行榜》榜单内赛事。飞桨共承办了百度完全模型组和百度智慧交通组两大赛道。下文为百度智慧交通组具体安排。组织机构主办单位:中国自动......
  • P9387 [THUPC 2023 决赛] 巧克力 题解
    这篇题解会只讲怎么dp,所以我们这里跳过博弈论的部分。Let'srephrasetheproblemstatementasfollows:给定\(n,m\),设\(x=1\oplus2\oplus\cdots\oplusn\oplusm\)。求有多少个有序三元组\((a,b,c)\)满足:\(a+b+c\len\)或\(a+b+c=m\)(如果都满足需要算两遍)。\((a+b......
  • 第三届“泰迪杯”数据分析职业技能大赛: 教育平台的线上课程智能推荐 (决赛候选)答辩P
    ......
  • 定了!12支队伍进入HarmonyOS极客马拉松2023决赛
     12支队伍将在8月初,华为开发者大会(HDC.Togerther)上展开巅峰对决! ......
  • 华泰证券FINTECH决赛第二题题解
    被第二题搞得坐牢2个半小时,在最后10分钟才确定推出的求和公式没问题,是除法取模不规范导致求解有偏差,只能说菜是原罪。这里贴一下赛后修改的代码,希望能对列位有些帮助,欢迎巨佬指导。思路:分奇偶讨论固定长度下伪回文串的数量,定义长度为\(n\)的伪回文串的数量为\(a_{n}\):(1)\(n\)......
  • P9381 [THUPC 2023 决赛] 那些脑海里最珍贵的
    小清新大模拟(?写起来挺顺的,就是浮点误差那块整破防了,最后问了神虎用了科学计数法存浮点数才过stO神虎Orz坑点:注意精度误差死亡后要清除Average的主动技能,防止重复触发死亡处理导致被动技能被弄乱Average的主动技能里的“\(3\)个回合”指的是南北两边各行动一次算一......
  • 2023盘古石决赛
    流量分析1.计算流量包文件的SHA256值是?[答案:字母小写][★☆☆☆☆]结果为2d689add281b477c82b18af8ab857ef5be6badf253db1c1923528dd73b3d61a92.流量包长度在“640-1279”之间的的数据包总共有多少?[答案:100][★☆☆☆☆]流量包打开后发现没有http流,仔细观察发现是缺少了tls......
  • 2022 360强国杯决赛Web-writeup
    Webezxunrui分析1、下载附件开始审计迅睿路由规则不过多介绍了,需要选手自行分析代码逻辑,这里只公布漏洞点。控制器在如下位置。在API控制器中。存在qrcode操作用来生成二维码,会获取略缩图参数,如图。跟进一下发现存在curl的调用,存在SSRF漏洞。2、SSRFFastCGIRCE......