315 给你一个整数数组 \(nums\) ,按要求返回一个新数组 \(counts\) 。数组\(counts\) 有该性质:\(counts[i]\) 的值是 \(nums[i]\) 右侧小于 \(nums[i]\) 的元素的数量。 输入:\(nums = [5,2,6,1]\) 输出:\([2,1,1,0]\) 解释: \(5\) 的右侧有 \(2\) 个更小的元素 \((2 和 1)\) \(2\)
线段树 区间加,区间和 #include <iostream> #include <cstring> using namespace std; typedef long long ll; const int N = 1e5 + 10; ll w[N]; struct Node { int l, r; ll add, sum; }tr[N*4]; int n, m; void pushup(int u) { tr[u].sum = tr[u <&l
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const int N = 10010; int n; struct Segment { int x, y1, y2; int k; bool operator< (const Segment &t)const
https://www.luogu.com.cn/blog/styx-ferryman/xian-duan-shu-ge-bing-zong-ru-men-dao-fang-qi?tdsourcetag=s_pcqq_aiomsg %%% 权值线段树的一些操作 int getrank(int x){ return query_num(root,1,maxdata,1,x)+1; } int getpre(int x){//查询前驱 int tmp=query_num(r
题目链接 #865. 喵喵喵~ 小 \(C\) 养了 \(n\) 只猫,编号从 \(1-n\) 。小 \(C\) 不喜欢一次只给一头猫喂猫粮,因此他选择一下喂很多只编号连续的猫,并且每次喂的猫粮都是不同种类的。现在有 \(m\) 次操作,每 次操作给定 \(o p, l, r\) 。 若 \(o p=1\) ,代表小 \(C\) 会给编号为 \([l,
【线段树优化建图】【P5029 T'ill It's Over】 P5029 T'ill It's Over Analysis 每次将一个区间一块进行连边,可以用线段树优化,减少连边数。 具体在线段树每个节点维护一个编号,这个编号用一个tot来分配,在build时,每新建一个节点,tot++。将每个节点与它的左右儿子连边。 需要注意的是,
zkw线段树,我的信仰! 不过zkw线段树究竟是什么呢?一起来看一下吧。 zkw线段树是什么 zkw线段树,顾名思义,是一种线段树。 他是线段树的非递归形式,虽然没递归版线段树那么通用,但它的常数与码量吊打递归版线段树。 zkw线段树的实现 说了那么多,不会写也没用啊。 递归式线段树自上往下
F. MEX Queries 题意 1 l r 将区间l r 置 1 2 l r 将区间l r 置 0 3 l r 翻转区间l r(即 是1置0 是0置1) 求每次操作后值是0的最左位置编号 思路 用线段树维护 区间和 用一个lazy 标记当前结点 置1 置0 翻转 或者 无需操作(用于减少时间复杂度) 对于翻转操作 每次更新一个结点的lazy要
冲刺国赛5月2日第二场 \(t1\) 沉迷前缀和无法自拔,觉得扫描线是离散位置修改不好操作,没想到其实有零的情况只多了一点点 \(t2\) 在想回滚莫队,但是撤回操作不会很好地处理,并没有领会随机的意图…… \(t3\) 来者不善又是 \(FWT\)…… A. a 以 \(i\) 为右端点的最远左端点可以递推出
原题链接: 洛谷模板题 题目: 如题,已知一个数列,你需要进行下面两种操作: 1、将某区间每一个数加上 k。 2、求出某区间每一个数的和。 输入格式: 第一行包含两个整数 n,m,分别表示该数列数字的个数和操作的总个数。 第二行包含 n 个用空格分隔的整数,其中第 i 个数字表示数列第 i 项的初始
解决多线段单点最值问题。 模板题 浅略的说一下。 每个区间存储位于当前区间中的值最大的线段。每次插入新线段,如果当前区间没有存储线段,就直接插在这里,否则分类讨论一下,如果某一个子区间的最优线段必定是当前线段,这个子区间就不用处理了。而对于另一个有不确定因素的,我们把当前的
小豆现在有一个数 x,初始值为 1。小豆有 QQ 次操作,操作有两种类型: 1 m:将 x变为 x × m,并输出 x mod M 2 pos:将 x 变为 x 除以第 pos次操作所乘的数(保证第 pos 次操作一定为类型 1,对于每一个类型 1 的操作至多会被除一次),并输出 x mod M。 第一眼真的看不出来是个线
仓鼠的鸡蛋 思路: 把线段树权值全部置为m,维护区间最大值,每次优先找满足条件的左边的区间 const int N = 500010; int cnt[N]; int a[N]; int n, m, k; int tr[N << 2]; int M = 1; void pushup(int p) { tr[p] = max(tr[p << 1] , tr[p << 1 | 1]); } void build(int n) {
题目是洛谷的P3372,可以去看一下,传送门 算是常规模板了,先声明一下,我是数组爱好者,不喜欢用struct。代码在下面。 #include <bits/stdc++.h> using namespace std; #define MAXN 1000005 typedef long long ll; ll n, m, a[MAXN], ans[MAXN << 2], tag[MAXN << 2], x, y, k, oper; i
题目大意 地面上有 \(n\) 辆车,可以视为 \(n\) 个点,编号为 \(1\sim n\)。规定向右为正方向,每辆车的质量为 \(m_i\)。 由于车是破车,车轮瓦特了,只能与地面发生滑动而非滚动,车轮与地面之间的动摩擦因数为 \(\mu\)。已知每辆车在 \(t_0=0\) 时刻在外力作用下有速度 \(v_i\)(该速度由外力
洛谷P1496 火烧赤壁 求数轴上n条线段的并。\(n \le 2 \times 10 ^ 4, - 2 ^ {31} \le l, r \le 2 ^ {31}\) 做法 \(:\) 基于暴力的做法:每条线段往桶里加。 再加上两个小技巧。 第一个常用技巧是差分,即对于连续的中间无询问的一些修改,可以用 \(\Theta(1)\) 单点修改,全部搞完后再 \(
看了看没有人写详细的证明……可能觉得太简单了? 另外,我不觉得题面上的翻译是给人类阅读的…… 万老爷翻的题意: Teodor 有 \(n\) 条线段,端点都是正整数且在 \([1,m]\) 之间.他发现 没有一个整点满足在所有线段上。他把这个事实告诉 Sasha 然而她不信. Sasha 可以向 Teodor 询问若
Flags 题意:N 个 flag,第 \(i\) 个在 \(x_i\) 或 \(y_i\) 坐标上,求一种方案,使得每个 flag 之间的最小距离最大。 \(2\le N \le 10^4, 1\le x_i, y_i \le 10^9\) 不妨设 \(a[i] = x_i, a[i+n] = y_i\) ,这样可以方便的取出同组元素。 排序后,为了定位到原位置,需要使用 pair 去存放每个
线段树维护差分 D. Progressions Covering 题目大意: 数列a原来全是0,可以无限次进行一种操作,每次操作可以选择一段长度为k的区间,对该区间的数字分别对应加上1,2,3,...,k。再给出数列b,问最少操作几次可以使得a数列的每一个数字不小于b数列中的对应数字。 思路和代码: 可以操作题目给
多段线是由弧和线组成的多段连接线,是单一对象 步骤: 1.菜单位置:[绘图]→[多段线] 工 具 条:[绘图]→[多段线] 命 令 行:Pline(PL) 2.画出多条线段 3.选中线段-->鼠标放在顶点--> 鼠标放在线段-->
三道题,看了下时间和空间限制,都是很正常的限制 因为考试刚刚开始,也没什么想法,就从第一道题开始往下慢慢推 第一道题一开始就找到了思路就是BFS,而且变换方式就三种,地图还是一维的,敲了没多长时间就拿下了 第二道题一开始没什么想法,就是一个动态规划吧,然后单调不上升和单调不下降分别
1.数据结构 树状数组&线段树 序列 线段树优化统计过程,我的方法和基站选址异曲同工。 西瓜树之二 一道比较巧妙的题目。 or SPJ 一道比较简单的构造题,线段树起构造解的作用。 链上二次求和 一道公式题,把式子推出来后没那么难。 [HEOI2012]采花 很简单的一道题,评紫实在有点暴殄
1 #include <bits/stdc++.h> 2 #define Re register int 3 #define LL long long 4 #define ki cout << endl; 5 6 using namespace std; 7 8 //打个雨天的尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾尾巴 9 //我复习了lca...............学习了差分.... 10 //
题目链接 https://www.luogu.com.cn/problem/P1803 非要整些花里胡哨的题目和题意。。。。。。。 经典入门的贪心 因为要参加尽可能多的比赛,所以将结束时间排序,下一场比赛取结束时间早且与上一场比赛时间不冲突的。 放AC代码 1 #include<bits/stdc++.h> 2 using namespace st
简介 扫描线一般运用在图形上面,顾名思义,就是一条线在整个图上扫来扫去,它一般被用来解决图形面积,周长等问题。 扫描线的主要思想是虚拟出一条平行与 x 或 y 轴的无限长的线一路扫过去,如果发现触碰到矩形的边(被当前扫描线完全覆盖)就停下进行相关操作。 一、面积并 题型:在二维坐标