【学习笔记】数据结构全家桶

前言

2025.10.28:
一时兴起建了这个,原因是刚刚学了KTT qwq
我如果塞完这个东西应该都大学几年级了吧
没事慢慢弄

正文

线段树

KTT

点我展开看代码
#include<bits/stdc++.h>
#define rep(i, l, r) for(int i(l);i<=(r);++i)
#define per(i, r, l) for(int i(r);i>=(l);--i)
using namespace std;
namespace IO{
template <typename T>
inline void read(T &x){x = 0;static char c;static bool f;c = getchar(), f = 0;while(c<'0'||c>'9'){ if(c == '-')f = 1; c = getchar(); }while('0'<=c&&c<='9')x = (x << 3) + (x << 1) + (c ^ 48), c = getchar();x = f ? -x : x;
}
template <typename T,typename ...Types>
inline void read(T &x, Types &...y){read(x), read(y...);
}
}using namespace IO;using ll = long long;
const int N = 4e5 + 10;
const ll inf = 1e15;template <typename T>
inline void ckmin(T &x, T y){ (x > y) && (x = y); }int n,a[N],qcnt;namespace KTT{struct Func{int k; ll b;inline friend Func operator +(const Func &a,const Func &b){ return (Func){a.k+b.k,a.b+b.b}; }inline void add(ll v){ b += k * v; }
};
inline pair<Func, ll> max(Func a, Func b){if(a.k < b.k || (a.k == b.k && a.b < b.b))swap(a, b);if(a.b >= b.b)return {a, inf};return {b, (b.b-a.b)/(a.k-b.k)};
}
struct node{Func lm, rm, tot, sum;ll iter;//yu zhiinline friend node operator +(const node &a,const node &b){node res; pair<Func, ll> tmp;res.iter = min(a.iter, b.iter);tmp = max(a.lm, b.lm + a.sum);res.lm = tmp.first, ckmin(res.iter, tmp.second);tmp = max(b.rm, a.rm + b.sum);res.rm = tmp.first, ckmin(res.iter, tmp.second);tmp = max(a.tot, b.tot);ckmin(res.iter, tmp.second);tmp = max(tmp.first, a.rm + b.lm);ckmin(res.iter, tmp.second);res.tot = tmp.first;res.sum = a.sum + b.sum;return res;}
}tr[N << 2];
ll tag[N << 2];#define ls (p << 1)
#define rs (p << 1 | 1)
inline void pup(int p){ tr[p] = tr[ls] + tr[rs]; }
inline void ptag(int p,ll v){tag[p] += v;tr[p].iter -= v;tr[p].lm.add(v),tr[p].rm.add(v),tr[p].tot.add(v),tr[p].sum.add(v);
}
inline void pdown(int p){if(tag[p]){ptag(ls, tag[p]), ptag(rs, tag[p]);tag[p] = 0;}
}
void build(int p,int l,int r){if(l == r){Func tmp = {1, a[l]};tr[p] = {tmp, tmp, tmp, tmp, inf};return ;}int mid = (l + r) >> 1;build(ls, l, mid), build(rs, mid+1, r);pup(p);
}
void defeat(int p,int l,int r,ll v){if(v > tr[p].iter){int mid = (l + r) >> 1;defeat(ls, l, mid, tag[p]+v);defeat(rs, mid+1, r, tag[p]+v);tag[p] = 0, pup(p);}else ptag(p, v);
}
void upd(int p,int l,int r,int L,int R,int k){if(L <= l && r <= R)return defeat(p, l, r, k);pdown(p);int mid = (l + r) >> 1;if(L <= mid)upd(ls, l, mid, L, R, k);if(mid < R)upd(rs, mid+1, r, L, R, k);pup(p);
}
node qry(int p,int l,int r,int L,int R){if(L <= l && r <= R)return tr[p];pdown(p); int mid = (l + r) >> 1;if(R <= mid)return qry(ls, l, mid, L, R);if(L > mid)return qry(rs, mid+1, r, L, R);return qry(ls, l, mid, L, R) + qry(rs, mid+1, r, L, R);
}
#undef ls
#undef rs
}using namespace KTT;int main(){read(n), read(qcnt);rep(i, 1, n)read(a[i]);build(1, 1, n);int op, l, r, v;while(qcnt--){read(op);if(op == 1){read(l, r, v);upd(1, 1, n, l, r, v);}else{read(l, r);printf("%lld\n",max(0ll,qry(1, 1, n, l, r).tot.b));}}return 0;
}

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

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

相关文章

社区

社区报告名称:AR(Active Area Reverse)fin cut工艺参数与表征指标数据分析报告 版本:V1.0 日期:2025-09-05 编制人:李晓睿 审核人:[姓名/部门] 1. 数据收集报告 1.1 数据来源来源:AR(AA Reverse)fin cut工艺…

「Gym 102759I」Query On A Tree 17

题目大意 给定一颗 \(N\) 个节点以 \(1\) 为根的有根树,每次给以 \(u\) 为根的子树每点加 \(1\) 的值或给路径 \(u - v\) 上每点加 \(1\) 的值,每次修改后查询一个点 \(u\) 使得 \(\sum_{v = 1}^N dis(u, v)\) 最小。…

Mybatis使用简述

什么是 MyBatis? MyBatis 是一款优秀的 Java 持久层框架,它通过 XML 或注解的方式将 Java 对象与数据库中的记录进行映射。与传统的 JDBC 相比,MyBatis 极大地简化了数据库操作代码,让开发者能够更专注于业务逻辑而…

重组蛋白表达服务:CHO HEK293细胞系选择与表达优化方案

重组蛋白表达服务:CHO/HEK293细胞系选择与表达优化方案在生命科学研究领域,重组蛋白作为重要的科研试剂,其质量直接影响实验结果的可靠性。选择合适的表达系统并进行表达优化,是获得高质量重组蛋白的关键环节。本文…

C++里的代码命名规范

以下是 C++ 中最主流的几种命名规范: 1. 蛇形命名法 这是 C++ 标准库和许多 C++ 社区(如 Boost)最推荐的风格。小写蛇形命名法:所有字母小写,单词之间用下划线 _ 连接。适用于:变量、函数、命名空间、文件。 示例…

最小二乘问题详解6:梯度下降法

介绍了使用梯度下降法求解非线性最小二乘问题的原理与实现,通过C++和Eigen库对指数模型进行参数拟合,展示了算法流程、雅可比矩阵计算及收敛行为,并对比了其在机器学习与计算机视觉中的应用差异。1. 引言 在之前的两…

JavaWeb01

1.JavaWeb介绍 什么是JavaWeb?Web:全球广域网,也称万维网(www),能够通过浏览器访问的网站 JavaWeb:使用Java技术来解决相关web互联网领域的技术栈网页:展现数据 数据库:存储和管理数据 JavaWeb程序:逻辑处理数…

现代C++编程初体验

##实验任务1 ##代码#pragma once#include <string>// 类T: 声明 class T { // 对象属性、方法 public:T(int x = 0, int y = 0); // 普通构造函数T(const T &t); // 复制构造函数T(T &&t); …

Delphi 利用接口实现frame窗体间的通讯(互动)

需求说明: 程序设计:效果演示:设计思路: FrmCK 只负责发布事件,不关心谁在监听. FrmGrid 只负责响应事件,不关心事件来源. 创建过程: 一.创建接口单元FrmInterface. 全部代码如下:unit FrmInterface;interfaceusessy…

Python冒泡排序:简单易懂的算法实现

在编程的世界里,排序算法是数据处理的基础之一。冒泡排序(Bubble Sort)是一种简单且直观的排序算法,虽然它的效率不是最高的,但它非常适合初学者学习排序算法的基本概念。今天,我们就来详细探讨如何在Python中实…

SAM+ARM

一、首先是图像caption的生成。 输入的图像,被输入进BLIP的图像编码器得到图像嵌入,图像嵌入再经过(BLIP Image-grounded Text Decoder) 得到图像caption。ti表示caption的第i个单词,总共有L个单词。 但是,capti…

《代码大全2》观后感(二):需求分析——代码质量的“源头防线”

《代码大全2》观后感(二):需求分析——代码质量的“源头防线” “为什么明明按需求写的代码,最后还是要推翻重写?”这是我过去常有的困惑,直到读了《代码大全2》中“需求分析”的章节,才找到答案:很多时候,我…

NRF54LM20A 芯片的优点

多达 66 个 GPIO 7 个串行接口(SPI、TWI、UART、HS-SPI) 14 位 ADC、全局 RTC(在系统关闭状态下可用)、TDM、PDM、NFC、PWM、QDEC 等 显著降低的功耗 - 与 nRF52 系列相比,典型蓝牙低功耗应用场景下功耗降低约 30-50% …

零散点小总结(25.10.28)

今天练习了Dp,主要把Dp重新看待了一下,有以下几点Dp其实本质是一种表,用于储存子问题的答案 Dp中其实还有枚举,只是由于子问题被存入表中了,所以减少了时间复杂度 一个搜索其实就是Dp的暴力解,有很多的子问题,但…

Top Tree大学习

前言 \(Top Tree\) 用来解决 路径查询,动态 \(dp\) 等问题。 信息储存在 簇 中。 簇(\(Cluster\)) 树上一个边联通块,可以收缩成一条边,我们成这样的联通子图为 簇。 簇上的某些点与其它簇相接,我们称其为簇的 端…

乱学点东西目录

这里记录了各种各样的奇奇怪怪的算法/思路/数据结构,好玩! 乱学点东西#1 :二进制警报器可以自由转载

CFS任务的负载均衡(load balance)

前言 我们描述CFS任务负载均衡的系列文章一共三篇,第一篇是框架部分,第二篇描述了task placement和active upmigration两个典型的负载均衡场景。本文是第三篇,主要是分析各种负载均衡的触发和具体的均衡逻辑过程。 …

EVE-NG导入华为等镜像的方法

镜像下载Dynamips:思科设备真实IOS镜像,类似GNS3,电脑CPU利用率非常高。 IOL:IOU模拟器的镜像,基本完全支持思科设备二、三层功能。 QEMU:这已经不是镜像文件,而是KVM虚拟机安装操作系统后生成的磁盘文件,通常…

(简记)一类支配点对解决区间查询问题

前言:最近好像见了挺多这种题,记录一下。 支配点对 我们经常遇到树上或区间上关于 \(x,y\in[l,r]\) 一类的区间统计问题,且通常要求区间内点两两任意匹配并统计总贡献,这个贡献不具有简单可加性。我们往往通过找支…

2025 云斗

10/27 Contest 5 A:小分讨+dp C:发现是所有的数和它的倍数有限制,对于值域 \(n\) 这样的限制也只有 \(\sum\limits_{i=1}^n\frac{n}{i}=n\log n\) 个,考虑如何表示这些限制。 考虑对于限制 u,v,若两点都不是对方的…