区间问题
文章平均质量分 51
qq_45778406
这个作者很懒,什么都没留下…
展开
-
第k大数(多种方法)
方法一树状数组 + 二分优点:实现简单,原理简单缺点:只能对整体查询,不能查询区间第k大,而且要求数字不能太大复杂度:查询一次log2(n)log^2(n)log2(n)原理:树状数组中T[i]存储大小为i−lowbit(i)到ii-lowbit(i) 到 ii−lowbit(i)到i的数出现的次数, 查询时二分这个数即可,判断当前数是否为第k大数(直接用当前总数 - 查询得到的比i小的数)#include <iostream>#include <cstdio>#in原创 2021-05-08 20:15:56 · 362 阅读 · 0 评论 -
树状数组(复习)
树状数组)a[N]: 存的数据T[N]: T[i] 为 a[i−lowbit(i)]到a[i]a[i-lowbit(i)] 到 a[i]a[i−lowbit(i)]到a[i]的和c[N]: a[i] - a[i -1]单点修改,区间查询)单点修改j时, 改变了在他后面且i - lowbit[i] < j, 的i点, 故需要修改T[i];for(int i = x; i <= n; i += lowbit(i)) T[i] += y;单点查询直接前缀和即可for(int i原创 2021-04-17 17:22:18 · 108 阅读 · 0 评论 -
石子游戏(差分)
思路参考题解:我们要将所有数字变成一样其实也就是让差分数组中的正负值都变成零, 联想到模拟, 我们肯定要先让a[1] == a[2], 再依次让前1 ~ i的数字一样, 假设我们改变到了x, 如果d[x] = a[x] - a[x - 1] > 0, 说明a[i]这个数偏大, 我们需要将前1 ~ x - 1中的数都变成和a[x]一样大而如果((x - 1) % k != 0)则无法实现,如果d[x] < 0 则需要将x + 1 ~ n的数都减小, (但我们没法减小, 可以先提前让答案减小, 看原创 2021-02-24 01:23:34 · 139 阅读 · 0 评论 -
油漆面积(扫描线+线段树)
题面X星球的一批考古机器人正在一片废墟上考古。该区域的地面坚硬如石、平整如镜。管理人员为方便,建立了标准的直角坐标系。每个机器人都各有特长、身怀绝技。它们感兴趣的内容也不相同。经过各种测量,每个机器人都会报告一个或多个矩形区域,作为优先考古的区域。矩形的表示格式为 (x1,y1,x2,y2),代表矩形的两个对角点坐标。为了醒目,总部要求对所有机器人选中的矩形区域涂黄色油漆。小明并不需要当油漆工,只是他需要计算一下,一共要耗费多少油漆。其实这也不难,只要算出所有矩形覆盖的区域一共有多大面原创 2021-02-08 13:38:37 · 220 阅读 · 0 评论 -
K大数查询(线段树套线段树)
Description有N个位置,M个操作。操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数是多少。Input第一行N,M接下来M行,每行形如1 a b c或2 a b cOutput输出每个询问的结果Sample Input2 51 1 2 11 1 2 22 1 1 22 1 1 12 1 2 3Sample Output121Hint【样原创 2021-02-07 01:58:02 · 189 阅读 · 0 评论 -
牛异或(trie,前缀和)
题面农夫约翰在给他的奶牛们喂食时遇到了一个问题。他共有 N头奶牛,编号 1∼N。每次喂食前,这 N头奶牛会按照 1∼N的顺序站成一排。此外,每头奶牛都被分配了一个可能不唯一的整数。那么所有被分配的整数就形成了一个长度为 N的整数序列。请你在该整数序列中找出一个连续的非空子序列,使得子序列中元素的异或和能够最大。如果存在多个这样的序列,那么选择序列末端整数对应的奶牛编号更小的那个序列。如果仍然存在多个可选的序列,那么选择长度最短的那个序列。输入格式第一行包含整数 N。第 2∼N+1行,每行包含一个整数,原创 2021-02-02 11:47:52 · 138 阅读 · 0 评论