[ABC368G] Add and Multiply Queries

news2024/9/21 7:03:27

G - Add and Multiply Queries

2个单点,一个询问,感觉询问只能O(n)做

但是发现查询答案保证在1e18以下 2^60

也就是说b[i]>1最多60个

也就是说需要判断的地方最多60个,其他地方可以用区间和优化
用set or vector 记录b[i]>1的位置,二分找到就可以做区间和了

就写完了

// Problem: [ABC368G] Add and Multiply Queries
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/AT_abc368_g
// Memory Limit: 1 MB
// Time Limit: 2000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include<iostream>
#include<set>
using namespace std;
typedef long long ll;
const int N=1e5+9;
int a[N],b[N];
int n;
struct BIT{
    ll val;
}t[N];
ll lowbit(int x){return x&(-x);}
void update(int x,ll k){
    for(int i=x;i<=n;i+=lowbit(i)){
        t[i].val+=k;
    }
}
ll getsum(ll x){
    ll res=0;
    for(int i=x;i>0;i-=lowbit(i)){
        res+=t[i].val;
    }
    return res;
}
ll query(int l,int r){
	if(l>r){
		return 0;
	}else{
		return getsum(r)-getsum(l-1);
	}
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];	
		update(i,a[i]);
	}
	for(int i=1;i<=n;i++){
		cin>>b[i];	
	}
	set<int> st;
	st.insert(0);
	st.insert(n+1);//边界
	for(int i=1;i<=n;i++){
		if(b[i]>1){
			st.insert(i);
		}
	}
	int q;
	cin>>q;
	for(int i=1;i<=q;i++){
		int op,l,r;
		cin>>op>>l>>r;
		if(op==1){
			update(l,r-query(l,l));
		}else if(op==2){
			if(b[l]==1 && r!=1){
				st.insert(l);
			}
			if(b[l]!=1 && r==1){
				st.erase(l);
			}
			b[l]=r;
		}else{
			ll ans=query(l,l);
			l++;
			auto it=st.lower_bound(l);
			while(l<=r){
				if(b[l]!=1){//最多60次
					ans=max(ans+query(l,l),ans*b[l]);
					it++,l++;
				}else{
					ans+=query(l,min(*it-1,r));
					l=*it;
				}
			}
			cout<<ans<<'\n';
		}
	}
	return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何在 Python 中将字符串转换为日期时间或时间对象

文章目录 一、介绍二、datetime使用将字符串转换为对象datetime.strptime()三、将字符串转换为datetime.datetime()对象示例四、将字符串转换为datetime.date()对象示例五、将字符串转换为datetime.time()对象示例六、datetime.datetime()使用区域设置示例将字符串转换为对象七…

最小二乘模型和线性最小均方模型的区分

禹晶、肖创柏、廖庆敏《数字图像处理&#xff08;电子信息前沿技术丛书&#xff09;》P229、P230 这部分是最小二乘模型&#xff0c;而维纳滤波是建立在随机过程总体的基础上线性最小均方模型&#xff0c;所以这样的推导过程从概念上错误&#xff0c;删除。 后悔没听廖老师的。…

更改银河麒麟服务器的语言环境为中文

更改银河麒麟服务器的语言环境为中文 1、查看语言环境2、更改语言环境 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1、查看语言环境 打开终端&#xff0c;运行&#xff1a; locale -a查看是否包含zh_CN.UTF-8。 2、更改语言环境 编辑文…

无人机反制:低空安全综合管理平台技术详解

无人机反制技术中的低空安全综合管理平台&#xff0c;作为守护低空安全的重要工具&#xff0c;集成了多种先进的技术手段和管理功能&#xff0c;实现了对无人机等低空飞行器的全方位、无死角监控与反制。以下是对该技术平台的详细解析&#xff1a; 一、技术架构与核心功能 低…

Vue笔记总结(Xmind格式):第五天

Xmind鸟瞰图&#xff1a; 简单文字总结&#xff1a; 1. 生命周期 Vue 框架内置函数&#xff0c;随着组件的生命周期阶段&#xff0c;自动执行 作用: 特定的时间点&#xff0c;执行特定的操作 场景: 组件创建完毕后&#xff0c;可以在created 生命周期函数中发起Ajax 请求&am…

2024/8/31 笔记

IOC&DI 之前写了一点&#x1f447; 7/8 复盘-CSDN博客 事务管理 为什么需要事务管理 &#x1f446;一般加在业务层增删改的方法上&#xff0c;查询或者简单的增删改基本用不上 事务的回滚 rollbackForException.class //设置所有异常都会回滚&#x1f447; 事务…

华为云征文|下一代云服务器,Flexus X实例选购指导

华为云 Flexus 服务器所提供的 Flexus X 实例&#xff0c;是基于擎天 QingTian 架构、瑶光云脑、盘古大模型等根技术的创新&#xff0c;基于业务负载可灵活匹配业务产品所需要的资源规格&#xff0c;同时是业界内首款基于应用驱动的柔性算力云服务器。 Flexus X 实例具有大模型…

Java18 设计模式

第十八节&#xff1a;设计模式 1.设计模式概述 1.1软件设计模式的产生背景 ​ "设计模式"最初并不是出现在软件设计中&#xff0c;而是被用于建筑领域的设计中。1977年美国著名建筑大师、加利福尼亚大学伯克利分校环境结构中心主任克里斯托夫亚历山大&#xff08;…

谁便宜就选谁---基于成本的优化

什么是成本 我们之前老说MySQL执行一个查询可以有不同的执行方案&#xff0c;它会选择其中成本最低&#xff0c;或者说代价最低的那种方案去真正的执行查询。不过我们之前对成本的描述是非常模糊的&#xff0c;其实在MySQL中一条查询语句的执行成本是由下面这两个方面组成的&a…

十四、坦克大战(上)

文章目录 一、坦克大战游戏演示(略)二、java绘图坐标体系三、java绘图技术3.1 快速入门3.2 绘图原理Graphics类 四、java事件处理机制五、绘制坦克5.1 坦克抽象类、己方坦克、敌方坦克5.2 自定义面板5.3 绘图界面 一、坦克大战游戏演示(略) 二、java绘图坐标体系 三、java绘图…

LVGL 控件之日历(lv_calendar)

目录 一、日历1、组成2、创建日历3、日期的设置/显示3.1 设置当前日期3.2 显示日期3.3 日历头 4、设置日期高亮5、设置日名6、事件7、API 函数 一、日历 1、组成 日历部件由两个部分组成&#xff1a; 主体背景 LV_PART_MAIN&#xff1b;各个按钮 LV_PART_ITEMS&#xff08;指…

kubeadm部署 Kubernetes(k8s) 高可用集群【V1.20 】

kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具。 calico.yaml kubernertes-dashboard.yaml 1. 安装要求 在开始之前&#xff0c;部署Kubernetes集群机器需要满足以下几个条件&#xff1a; 7台机器&#xff0c;操作系统Openeuler22.03 LTS SP4硬件配置&#…

【GPT】Coze使用开放平台接口-【1】创建插件

本文档主要描述在 coze 里面把开放平台的接口创建为插件&#xff0c;供别人调用。本系列调用的接口&#xff0c;都是调用快商通 AI 开放平台的接口 注意&#xff1a;如果是团队需要的&#xff0c;建议直接在团队空间里面创建这些&#xff0c;不然在个人空间创建得很爽&#xff…

Linux——命令行文件的管理(创建,复制,删除,移动文件,硬链接与软链接)

目录 一、创建文件和目录 二、复制文件和目录 三、删除文件和目录 四、移动文件和目录 五、硬链接和软链接&#xff08;软链接也指符号链接&#xff09; 索引节点&#xff08;inode) 硬链接 软链接&#xff08;符号链接&#xff09; 一、创建文件和目录 mkdir命令可以创…

PCIe 复位:必须了解的PERST#

1.什么是PERST# PERST#作为 Fundamental Reset&#xff0c;是直接通过边带信号PERST#&#xff08;PCI Express Reset&#xff09;产生的。Fundamental Reset会复位整个PCIe设备&#xff0c;初始化所有与状态机相关的硬件逻辑&#xff0c;端口状态以及配置空间中的配置寄存器…

使用谷歌翻译的推荐理由及其他翻译工具推荐~

在现在快节奏的工作中&#xff0c;翻译工具已成为我们日常当中不可或缺的助手。其中&#xff0c;谷歌翻译以其高效、准确的特点&#xff0c;在众多翻译软件中脱颖而出。以下&#xff0c;我为您详细介绍为何推荐在工作中使用谷歌翻译&#xff0c;并同时提供其他三款优秀的翻译工…

linux内核驱动:pca953xIO扩展芯片驱动总结

目录 前言一、PCA9536芯片介绍二、驱动说明三、配置流程四、应用操作方式 前言 本笔记总结使用ti 的PCA953x进行SOC的GPIO扩展时步骤&#xff0c;基于linux内核版本5.10.xxx&#xff1b; 一、PCA9536芯片介绍 【1】PCA9536是基于i2c接口的GPIO扩展芯片&#xff0c;最大支持到…

【Java学习】多线程JUC万字超详解

所属专栏&#xff1a;Java学习 1. 多线程的概念 线程&#xff1a;线程是操作系统能够进行运算调度的最小单位&#xff0c;它被包含在进程之中&#xff0c;是进程的实际运作单位 下面这些每一个能够运行的软件就是一个进程 并发&#xff1a;在同一时刻&#xff0c;有多个…

网络编程学习:TCP/IP协议

TCP/IP协议简介 TCP/IP协议包含了一系列的协议&#xff0c;也叫TCP/IP协议族&#xff08;TCP/IP Protocol Suite&#xff0c;或TCP/IP Protocols&#xff09;&#xff0c;简称TCP/IP。 分层结构 为了能够实现不同类型的计算机和不同类型的操作系统之间进行通信&#xff0c;引…

Java中的锁(四)利用读写锁实现高性能网页缓存

文章目录 背景Ehcache2源码解析-如何实现缓存网页读写锁ReentrantReadWriteLock解析读写锁的特性读写锁是如何实现的&#xff1f; 如何将Ehcach2-web的源码迁移到Ehcach3中&#xff1f;/ 如何自定义Filter实现高性能网页缓存&#xff1f; 背景 在我们的销售页面&#xff0c;有…