区间查询最值:https://codeforc.es/contest/1709/problem/D 题目没说求最小,可以先走到最下面再往右走。 判断的时候用一下线段树判断就好了。 #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int,int>pii; const int mod=998244353; const int
要利用canvas绘画,首先要在HTML中添加canvas标签 <body> <canvas> 明天不放假!!!!! </canvas> </body> 在JavaScript中获取节点并得到“绘制上下文”对象 var canvas = document.querySelector("canvas") //获取标签名为canvas的节点 var ctx = canvas.getContext("2
线段树 区间修改,区间查询(和) 点击查看代码 #include<bits/stdc++.h> using namespace std; typedef long long LL; const int N = 5e5 + 10; int n, m; LL w[N]; struct Node { int l, r; LL sum, add; } tr[N << 2]; void pushup(int u) { tr[u].sum = tr[u
p.s. 代码块缩进有问题,但不影响正常阅读,请忽略。 区间内最大连续权值和 P4513 小白逛公园: 区间询问 + 单点修改。 对于询问区间内最大连续权值和,按照套路,维护 \(t_i.lmax\) 与 \(t_i.rmax\),注意在查询的时合并答案要分情况。具体地,看代码吧(实在描述不来): node query (int i, int
(水) struct point{int l,r,val1,val2/*要维护的信息*/,tag1,tag2/*标记*/;}tree[maxn<<2]; point pushup(point x,point y,int tg1,int tg2/*标记传进来*/) { point ans; if(x.l==0)return y;//如果其中一个为空直接返回另一个 if(y.l==0)return x; ans.l=x.l;ans.
例题:P5490 【模板】扫描线 update at 2022.5.28 更新到了当前版本(雾)的码风 因为切不动线段树合并就去搞扫描线了 虽然扫描线也搞了一晚上加半个上午 切入正题 扫描线是一种为了处理如多个矩形有重叠的覆盖在一起的不规则图形的算法。 如图:(图片来自网络) 整个图形的面积就转化
Description At the children's day, the child came to Picks's house, and messed his house up. Picks was angry at him. A lot of important things were lost, in particular the favorite sequence of Picks. Fortunately, Picks remembers how to repair t
一、题目 点此看题 二、解法 思维方式太低级了,好像最近状态还不及省选之前,要准备开始复习了。 直接使用 01-principle,先考虑对于一个 \(01\) 序列如何计算。对于序列上每个 \(0\) 的极长连续段都是独立的,可以分开来考虑,它们被两个 \(1\) 包夹住(特别地,序列边界也视为有 \(1\)) 设 \(
Description We'll call an array of n non-negative integers a[1], a[2], ..., a[n]interesting, if it meets m constraints. The i-th of the m constraints consists of three integers li, ri, qi (1 ≤ li ≤ ri ≤ n) meaning that value shoul
线段树每个结点维护一个线性基,插入时直接插入,查询时把所有被查询区间所包含的区间的线性基插入到一个大的线性基里,最后在大的线性基里查询就好了。 \(O(n\log m\log ^2x)\) 对于单点修改,给从根节点到单点的路径每个点都插入这个数。 对于区间查询,把所有答案插入到一个大的线性基里
一、题目 两个多重集 \(A,B\),其中每个元素都有两个属性 \(a,b\),取 \(x\in A,y\in B\),最小化: \[\max(a_x+a_y,b_x+b_y) \]有 \(m\) 次修改,每次修改会对 \(A/B\) 进行一次插入\(/\)删除,你需要动态地维护这个最小值。 \(m\leq 10^6\) 二、解法 考试的时候只会线段树分治,脑子还是不行
树状数组 Waiting... 如何使用树状数组进行区间修改 Waiting... 线段树榫卯式写法 Waiting... 线段树覆盖式写法 Waiting...
题目链接:https://vjudge.net/contest/504104 D - It's a Mod, Mod, Mod, Mod World 是以前都没听说过的类欧几里得算法,呜 G - Intersecting Rectangles 题意 给定n个矩形,判断是否存在两个矩形相交,即边框有交点,保证所有的横坐标互不相同,所有纵坐标互不相同。 主席树做法 把每个矩形
题目链接:https://vjudge.net/contest/504104 D - It's a Mod, Mod, Mod, Mod World 是以前都没听说过的类欧几里得算法,呜 G - Intersecting Rectangles 题意 给定n个矩形,判断是否存在两个矩形相交,即边框有交点,保证所有的横坐标互不相同,所有纵坐标互不相同。 主席树做法 把每个矩形
只要我什么都不会,一道题就可以快乐学习一下午( 货车运输 蓝题 题目描述 A 国有 \(n\) 座城市,编号从 \(1\) 到 \(n\),城市之间有 \(m\) 条双向道路。每一条道路对车辆都有重量限制,简称限重。 现在有 \(q\) 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的情况下,最多能运多重
Description During the War of Resistance Against Japan, tunnel warfare was carried out extensively in the vast areas of north China Plain. Generally speaking, villages connected by tunnels lay in a line. Except the two at the ends, every village was dire
Description You are given circular array a0, a1, ..., an - 1. There are two types of operations with it: inc(lf, rg, v) — this operation increases each element on the segment [lf, rg] (inclusively) by v; rmq(lf, rg) — this operation return
线段树(Segment Tree)是一种二叉树形态的数据结构。 用于存储区间或线段,并且允许快速查询结构内包含某一点的所有区间信息。 过程类似于归并排序,通过递归实现。 线段树的基本操作: 建立线段树:复杂度O(n),递归建立,从叶节点→根 区间查询:复杂度O(log n),递归查找,从根→叶节点 区间修改:复
目录目名题意题解代码 目名 超链接名字 时间限制 空间限制 题意 题意 题解 题解 代码 代码块
目录 线段树分治 本题做法 实现 线段树分治 事实上线段树分治的做法很简单,就是在时间轴上开线段树,以方便处理在一段时间内其效果的操作。 比如说,现在整棵线段树维护的时间范围是 \([1, 3]\),开出的线段树自然是: 现在有一个操作在时间 \([1, 2]\) 上作用,那么对应于线段树的节点就
这个之前学过的,结果我发现我忘了,怕之后再忘,我就再写一下吧。毕竟这个东西非常有用(好写)可以代替cdq/平衡树+斜率优化,来优化dp 流程 数据结构本质是一棵线段树,每个节点都储存了\(bst[]\)。 \(bst[l,r]\)表示覆盖该点范围的在\(mid\)处取最值的线段。 你会想:维护这个有什么用?每个
题目大意 给定一个数列。 有两个操作 一,调换队列中下标为 \(x\) 和 \(y\) 的元素的位置; 二,询问一个数列\(D\)的 \(a, a+1, a+2......b\) 的一种排列方式为该队列的子队列。 解析 一,显然,取这个数列的每个元素所对应的下标的最大值 \(maxt\) 和 最小值 \(mint\)。 当 \(maxt - mint
题目链接在这里:Problem - K - Codeforces 经过观察可以发现会见骑士结束的时间点可以表示成一个式子c_x=max(t_i+sigma(d_i+...d_x)) (i=1...x) 只需要把 t_i 离散化出来,这就是跟上一个一样的经典线段树模型。 码力要加强啊!写的时间太长了! 1 #include "bits/stdc++.h" 2 #defin
\(\large\text{Date: 7.11}\) 可持久化 这个东西,能够维护一个数据结构的历史状态,主要做法就是(树状数据结构)开很多根对应不同版本的历史状态,然后每次修改就备份发生变化的节点,剩下的地方不变。可持久化主要是对空间有较大的优化。比如要开非常多棵线段树而空间会炸的时候就可以考虑
前言(在博客园发布的第一篇题解): 这可是道好题啊,我用的是利用可持久化线段树在线查询具有历史版本的基于AC自动机的fail树,当然更多的大佬是用普通线段树或树状数组离线查询,蒟蒻表示不想离线,就写了个在线的,码量也不大,去掉注释可达到 3kb 以内(没比离线多多少),而且很多都是模板代码,敲起