牛客题目数据结构

news2024/11/16 18:05:39

做过线段树2模板大概可以写出一部分代码,这题主要关键点是怎么维护平方和

借图了

这样处理完maketag的代码就出来了

void maketag(int id,int l,int r,ll v,int opt){
	if(opt==1){
		seg[id].val*=v;
		seg[id].pfval*=(v*v);
		seg[id].mul*=v;
	}else{
		seg[id].pfval+=v*v*(r-l+1)+2*v*seg[id].val;
		seg[id].val+=(r-l+1)*v;
		seg[id].add+=v;
	}
}

感觉这类题只要数学处理出得到懒标记后,式子变化量是什么就可以了

对了还需要看一下变化量有没有用到其他维护量,如果有要把维护量放在后面更新

// Problem: 数据结构
// Contest: NowCoder
// URL: https://ac.nowcoder.com/acm/contest/19684/D
// Memory Limit: 524288 MB
// Time Limit: 2000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include<iostream>
#include<algorithm>
#include<vector>
#define INF (1ll<<60)
using namespace std;
typedef long long ll;
const int N=1e5+9;
int a[N];
struct node{
	ll val,pfval,mul,add;
}seg[N<<2];
ll tl(ll x){
	return x<<1;
}
ll tr(ll x){
	return x<<1|1;
}
void pushup(int id){
	seg[id].val=seg[tl(id)].val+seg[tr(id)].val;
	seg[id].pfval=seg[tl(id)].pfval+seg[tr(id)].pfval;
}
void build(int id,int l,int r){
	seg[id].mul=1;
	if(l==r){
		seg[id].val=a[l];
		seg[id].pfval=a[l]*a[l];
	}else{
		int mid=(l+r)>>1;
		build(tl(id),l,mid);
		build(tr(id),mid+1,r);
		pushup(id);
	}
}
bool inrange(int L,int R,int l,int r){
	return L>=l && R<=r;
}
bool outofrange(int L,int R,int l,int r){
	return L>r || l>R;
}
void maketag(int id,int l,int r,ll v,int opt){
	if(opt==1){
		seg[id].val*=v;
		seg[id].pfval*=(v*v);
		seg[id].mul*=v;
	}else{
		seg[id].pfval+=v*v*(r-l+1)+2*v*seg[id].val;
		seg[id].val+=(r-l+1)*v;
		seg[id].add+=v;
	}
}
void pushdown(int id,int l,int r){
	int mid=(l+r)>>1;
	maketag(tl(id),l,mid,seg[id].mul,1);
	maketag(tr(id),mid+1,r,seg[id].mul,1);
	maketag(tl(id),l,mid,seg[id].add,2);
	maketag(tr(id),mid+1,r,seg[id].add,2);
	seg[id].mul=1;
	seg[id].add=0;
}
ll querysum(int id,int L,int R,int l,int r){
	if(inrange(L,R,l,r)){
		return seg[id].val;
	}else if(!outofrange(L,R,l,r)){
		int mid=(L+R)>>1;
		pushdown(id,L,R);
		return querysum(tl(id),L,mid,l,r)+querysum(tr(id),mid+1,R,l,r);
	}else{
		return 0;
	}
}
ll querypfsum(int id,int L,int R,int l,int r){
	if(inrange(L,R,l,r)){
		return seg[id].pfval;
	}else if(!outofrange(L,R,l,r)){
		int mid=(L+R)>>1;
		pushdown(id,L,R);
		return querypfsum(tl(id),L,mid,l,r)+querypfsum(tr(id),mid+1,R,l,r);
	}else{
		return 0;
	}
}
void modifymul(int id,int L,int R,int l,int r,ll v){
	if(inrange(L,R,l,r)){
		maketag(id,L,R,v,1);
	}else if(!outofrange(L,R,l,r)){
		int mid=(L+R)>>1;
		pushdown(id,L,R);
		modifymul(tl(id),L,mid,l,r,v);
		modifymul(tr(id),mid+1,R,l,r,v);
		pushup(id);
	}
}
void modifyadd(int id,int L,int R,int l,int r,ll v){
	if(inrange(L,R,l,r)){
		maketag(id,L,R,v,2);
	}else if(!outofrange(L,R,l,r)){
		int mid=(L+R)>>1;
		pushdown(id,L,R);
		modifyadd(tl(id),L,mid,l,r,v);
		modifyadd(tr(id),mid+1,R,l,r,v);
		pushup(id);
	}
}
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	build(1,1,n);
	for(int i=1;i<=m;i++){
		int opt;
		cin>>opt;
		if(opt==1){
			int l,r;
			cin>>l>>r;
			cout<<querysum(1,1,n,l,r)<<'\n';
		}else if(opt==2){
			int l,r;
			cin>>l>>r;
			cout<<querypfsum(1,1,n,l,r)<<'\n';
		}else if(opt==3){
			int l,r,x;
			cin>>l>>r>>x;
			modifymul(1,1,n,l,r,x);
		}else{
			int l,r,x;
			cin>>l>>r>>x;
			modifyadd(1,1,n,l,r,x);
		}
	}
    return 0;
}

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

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

相关文章

小程序 UI 风格,赏心悦目

小程序 UI 风格&#xff0c;赏心悦目

通过 Webhook 将消息推送至钉钉、飞书、企业微信

本文首发于只抄博客&#xff0c;欢迎点击原文链接了解更多内容。 前言 当我们在 VPS 与 NAS 上部署了大量的应用&#xff0c;如何优雅的接收推送消息就成了一个大问题&#xff0c;在“上古时代”最常用的莫过于 SMTP 直接发送邮件进行通知&#xff0c;但当推送的消息过多且频繁…

LabVIEW开发实验室超导体电流特性测试系统

本系统旨在为学校实验室提供一个基于LabVIEW的超导体电流特性测试平台&#xff0c;通过精确测量超导体在不同温度和电流条件下的电学特性&#xff0c;帮助学生和研究人员深入理解超导体的物理性质。本文将从背景、目标、工作原理、使用方法、操作流程和注意事项等方面详细介绍该…

简单聊聊大数据解决方案

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

MySQL数据库的基础:逻辑集合数据库与表的基础操作

本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人能接…

代码随想录算法训练营第三十二天| 122.买卖股票的最佳时机II,55. 跳跃游戏 ,45.跳跃游戏II

122. 买卖股票的最佳时机 II - 力扣&#xff08;LeetCode&#xff09; class Solution {public int maxProfit(int[] prices) {if(prices.length 0){return 0;}int min prices[0];int result 0;for(int i1;i<prices.length;i){if(prices[i] > min){result (prices[i]…

day31贪心算法part01| 理论基础 455.分发饼干 376. 摆动序列 53. 最大子序和

**455.分发饼干 ** 视频讲解 | 力扣链接刚开始想到的&#xff0c;但是这样太暴力了&#xff0c;太笨了 class Solution { public:int findContentChildren(vector<int>& g, vector<int>& s) {// 胃口g 饼干尺寸sint result 0;sort(s.begin(), s.end());…

数据可视化——pyecharts库绘图

目录 官方文档 使用说明&#xff1a; 点击基本图表 可以点击你想要的图表 安装&#xff1a; 一些例图&#xff1a; 柱状图&#xff1a; 效果&#xff1a; 折线图&#xff1a; 效果&#xff1a; 环形图&#xff1a; 效果&#xff1a; 南丁格尔图&#xff08;玫瑰图&am…

cnvd_2015_07557-redis未授权访问rce漏洞复现-vulfocus复现

1.复现环境与工具 环境是在vulfocus上面 工具&#xff1a;GitHub - vulhub/redis-rogue-getshell: redis 4.x/5.x master/slave getshell module 参考攻击使用方式与原理&#xff1a;https://vulhub.org/#/environments/redis/4-unacc/ 2.复现 需要一个外网的服务器做&…

大数据快速使用Kerberos认证集群

一、创建安全集群并登录其Manager 创建安全集群&#xff0c;开启“Kerberos认证“参数开关&#xff0c;并配置“密码“、“确认密码“参数。该密码用于登录Manager&#xff0c;请妥善保管。 登录MRS管理控制台页面。 单击“集群列表“&#xff0c;在“现有集群“列表&#xf…

Puppeteer实战案例:自动化抓取社交媒体上的媒体资源

在当今数字化时代&#xff0c;社交媒体已成为人们获取信息、分享生活和进行商业推广的重要平台。随着社交媒体内容的爆炸性增长&#xff0c;自动化抓取社交媒体上的媒体资源变得尤为重要。本文将介绍如何使用Puppeteer这一强大的自动化工具来实现这一目标。 1. Puppeteer简介 …

技术前沿 |【大模型BLIP-2的多模态训练】

大模型BLIP-2的多模态训练 一、引言二、BLIP-2模型概述三、多模态训练成本问题四、冻结预训练好的视觉语言模型参数的优势五、冻结预训练好的视觉语言模型参数的方法 一、引言 随着人工智能技术的飞速发展&#xff0c;大型多模态模型如BLIP-2在多个领域取得了显著的成果。然而…

人脸考勤项目实训

第一章 Python-----Anaconda安装 文章目录 第一章 Python-----Anaconda安装前言一、Anaconda是什么&#xff1f;二、Anaconda的前世今生二、Windows安装步骤1.官网下载2.安装步骤安装虚拟环境 总结 前言 工欲善其事必先利其器&#xff0c;项目第一步&#xff0c;安装我们的环境…

《python程序语言设计》2018版第5章第35题求完全数,解题经历,我认为的正确代码放在最后

5.35从4月开始一直到成功&#xff0c;此文章将所有的记录和不同阶段代码展现给大家。但是没有配图&#xff0c;我最后成功的代码放在了最后。 2024.04.15 05.35.01version 求完整数&#xff0c;这个让我突然有点蒙。我什么时候能求完整数呢&#xff1f;&#xff1f; 正因子之和…

图Transformer 推荐系统

文章目录 Graph Transformer for Recommendation摘要引言相关工作方法3.1 Graph Invariant Rationale Learning3.1.1 Graph Collaborative Rationale Discovery3.1.2 Global Topology Information Injection3.1.3 Rationale Discovery with Graph Transformer.3.1.4 Task-Adapt…

React中的 Scheduler

为什么需要调度 在 React 中&#xff0c;组件最终体现为 Fiber&#xff0c;并形成 FiberTree&#xff0c;Fiber 的目的是提高渲染性能&#xff0c;将原先的 React 渲染任务拆分为多个小的微任务&#xff0c;这样做的目的是可以灵活的让出主线程&#xff0c;可以随时打断渲染&a…

视觉大模型(VLLM)学习笔记

视觉多模态大模型&#xff08;VLLM&#xff09; InternVL 1.5 近日&#xff0c;上海人工智能实验室 OpenGVLab 团队、清华大学、商汤科技合作推出了开源多模态大语言模型项目InternVL 1.5&#xff0c;它不仅挑战了商业模型巨头例如 GPT-4V 的霸主地位&#xff0c;还让我们不禁…

如何一键拷贝PPT中的所有文字?

有时我们可能需要引用PPT的文字&#xff0c;但一个幻灯片一个幻灯片拷贝很是麻烦&#xff0c;我们想一键拷贝PPT中所有幻灯片中的内容&#xff08;最近我就遇到了这个需求&#xff09;。今天就来讲讲这个一键拷贝的技巧。因为大家可能会遇到同样的问题&#xff0c;所以在此记录…

JAVA网络编程,反射及注解知识总结

文章目录 网络编程软件架构三要素IP端口号协议UDP协议发送数据接收数据三种通信方式 TCP协议客户端服务器端三次握手四次挥手 反射获取字节码文件获取构造方法获取成员变量获取成员方法反射的作用 动态代理注解作用格式使用位置注解的原理常见注解元注解自定义注解解析注解 网络…