【题解】CF 1582G Kuzya and Homework

news/2025/2/26 18:07:23/文章来源:https://www.cnblogs.com/zhangxyhp/p/18739269

要求结果为整数,我们将所有 \(a_i\) 分解质因数,对于每个质数分别考虑。

考虑对于一个左端点 \(l\),能满足要求的右端点一定在从 \(l\) 开始的一段连续区间中。于是我们得对于每个 \(l\) 求出 \(ans_l\) 表示那个最远的右端点。

对于一个质数 \(p\),假设 \(a_i\) 中有 \(k\)\(p\),如果 \(b_i\) 为乘号就在 \(i\) 这里记一个 \(k\),否则记一个 \(-k\)。然后再做一个前缀和 \(pre\)。那么对于 \(l\),我们要求的就是最大的 \(r\),满足 \(\forall k\in[l,r],pre_k-pre_{l-1}\ge 0\)。可以倒着扫,维护一个单调栈,每次在单调栈上二分。但是这样的时间复杂度是无法承受的。我们考虑如果 \(a_i\) 中没有 \(p\),那么 \(i\) 这个位置的答案就是等于 \(i+1\) 的答案的。于是我们只用存储那些包括了 \(p\) 的位置。于是就成了若干次区间的取 \(\min\)。再用并查集扫一遍即可。

先将所有质数都筛出来,时间复杂度可以承受。

#include<bits/stdc++.h>
#define ll long long
#define il inline
#define pb push_back
#define pii pair<int,int>
#define mp make_pair
#define fir first
#define sec second
#define lwrb lower_bound
using namespace std;
namespace asbt{
namespace cplx{bool begin;}
const int maxn=1e6+5,inf=0x3f3f3f3f;
int n,prn,a[maxn];
int prm[maxn],pre[maxn];
int zh1[maxn],zh2[maxn];
int fa[maxn],ans[maxn];
bool npr[maxn];
string b;
vector<pii> wei[maxn],cun[maxn];
il void init(int x){for(int i=2;i<=x;i++){if(!npr[i]){prm[++prn]=i;}for(int j=i*i;j<=x;j+=i){npr[j]=1;}}
}
il int find(int x){return x!=fa[x]?fa[x]=find(fa[x]):x;
}
namespace cplx{bool end;il double usdmem(){return (&begin-&end)/1048576.0;}
}
int main(){ios::sync_with_stdio(0),cin.tie(0);cin>>n;for(int i=1;i<=n;i++){cin>>a[i];}cin>>b;b=" "+b;init(1e3);for(int i=1,tmp;i<=n;i++){tmp=a[i];for(int j=1,cnt;j<=prn&&prm[j]<=tmp/prm[j];j++){if(tmp%prm[j]==0){cnt=0;while(tmp%prm[j]==0){tmp/=prm[j],cnt++;}wei[prm[j]].pb(mp(i,b[i]=='*'?cnt:-cnt));}}if(tmp>1){wei[tmp].pb(mp(i,b[i]=='*'?1:-1));}}for(int i=1,top;i<=1e6;i++){if(wei[i].empty()){continue;}pre[0]=wei[i][0].sec;for(int j=1;j<wei[i].size();j++){pre[j]=pre[j-1]+wei[i][j].sec;}top=1;zh1[1]=-inf,zh2[1]=n+1;for(int j=wei[i].size()-1,k;~j;j--){while(top&&zh1[top]>pre[j]){top--;}zh1[++top]=pre[j],zh2[top]=wei[i][j].fir;k=lwrb(zh1+1,zh1+top+1,pre[j]-wei[i][j].sec)-zh1-1;cun[zh2[k]-1].pb(mp(j?wei[i][j-1].fir+1:1,wei[i][j].fir));}}for(int i=1;i<=n+1;i++){fa[i]=i,ans[i]=n;}for(int i=0;i<=n;i++){for(pii j:cun[i]){for(int k=find(j.fir);k<=j.sec;k=find(k+1)){ans[k]=i;fa[find(k)]=find(k+1);}}}
//	for(int i=1;i<=n;i++){
//		cout<<ans[i]<<" ";
//	}
//	puts("");ll Ans=0;for(int i=1;i<=n;i++){Ans+=ans[i]-i+1;}cout<<Ans;return 0;
}
}
int main(){return asbt::main();}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/890213.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么去IOE化的背景下,还有必要学Oracle

很多人都知道有“去IOE化”这个口号,但事实上,有多少人知道是哪一年提出的这个口号吗?有多少人知道去的哪个IOE吗?现在越来越多的国产数据库出现,还有必要学Oracle、考OCP认证吗? 去IOE化 “去IOE化”这个口号早在2008、2009的时候就提出来了,原因是互联网发展需要、成本…

08 梯度消失与梯度爆炸问题

由反向传播原理可知,梯度的计算遵循链式法则。由于网络层数不断加深,梯度的连乘效应可能会导致梯度呈指数形式衰减,又或以指数形式增加。 前者叫做梯度消失,梯度消失导致网络中的早期层几乎不更新,使得网络难以学习到输入数据的有效特征。可能导致网络权重更新非常缓慢,使…

GAMES101 作业三

重要知识点一 布林冯反射模型 漫反射+高光+环境光重要知识点二 通过作业也对空间中的坐标变换认识更清晰了一点,在摄像空间中进行变换是不对的,需要从原来的三维空间进行变换才对,所以会有一个矫正系数 重要知识点三 在计算光线时,要注意计算向量和单位化 不了解的 对于后两…

写一个简单的hexo-tag-plugin:quote

前置教程 [Akilarの糖果屋 - Akilar.top](https://akilar.top/posts/e2bf861f/) 为啥想写一个quote的标签外挂 我最近在写博客的时候,发现好多时候原生的Hexo标签不是很好用,效果如下。 {% tabs Hexo Block Quote, -1 %}没有提供参数,则只输出普通的 blockquote{% blockquot…

搭建DeepSeek-R1平台

前言 大家用到 DeepSeek-R1 时应该会经常出现下面的情况。但凡多问两个问题,不但缓慢,而且容易出现服务器繁忙的问题:今天教大家一种通过API部署的方式,可以体验满血版的DeepSeek-R1,不仅回答快速,而且不会出现服务器繁忙的情况。 注册账号 首先大家要通过下面的方式,先…

No.16 CSS--背景属性

一、CSS常见的背景属性 background-color: aqua; 设置背景颜色background-image: none; 设置背景图片background-position: 0%; 设置背景图片位置background-repeat: no-repeat; 设置背景图片如何重复填充background-size: 0%; …

Mybatis基础06

动态SQL 介绍 什么是动态SQL:动态SQL指的是根据不同的查询条件 , 生成不同的Sql语句. 官网描述: MyBatis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其它类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句的痛苦。例如拼接时要确保不能忘记添加必要的空格,…

Spring5基础01

Spring概述简介Spring : 春天 --->给软件行业带来了春天 2002年,Rod Jahnson首次推出了Spring框架雏形interface21框架。 2004年3月24日,Spring框架以interface21框架为基础,经过重新设计,发布了1.0正式版。 很难想象Rod Johnson的学历 , 他是悉尼大学的博士,然而他的专…

P2375 [NOI2014] 动物园

P2375 [NOI2014] 动物园 题目描述 近日,园长发现动物园中好吃懒做的动物越来越多了。例如企鹅,只会卖萌向游客要吃的。为了整治动物园的不良风气,让动物们凭自己的真才实学向游客要吃的,园长决定开设算法班,让动物们学习算法。 某天,园长给动物们讲解 KMP 算法。 园长:“…

KUKA库卡机器人KR210维修与保养秘籍

在工业自动化领域,KUKA库卡机器人凭借其性能和稳定的运行,成为众多企业的不二选择。然而,再先进的设备也需要定期的进行KUKA库卡机器人KR210维修和KUKA机械手保养,以确保其高效运行。 一、KUKA库卡机器人KR210维修方法包含了定期检查、润滑保养、更换损坏部件、控制柜维护等…

以下是使用:empty 搭配before实现表格中数据为空时的默认展示

以下是使用:empty 搭配before实现表格中数据为空时的默认展示// 在文件.vue中的table<template><!-- 省略其他代码 --><el-table-column prop="title" label="标题"></el-table-column><el-table-column prop="desc"…

07 常用优化器简介

模型能否准确地预测数据,是通过损失函数来衡量的。如何调整权重和偏差参数,从而最小化神经网络的损失函数,这是一类特定的优化算法。我们称它们为优化器(optimizer)。 为什么需要优化器? 因为损失函数参数众多且结构复杂,其导数置零的方程无法得到解析解或计算非常复杂。…