LINK:冒泡排序 神题. 可以想到爆搜 期望得分5~10分. 打成这个样子心态不得爆炸? 仔细分析 一个不合法序列还有什么标志. 容易想到某个数字离自己位置相反的方向多走了一步. 考虑单独对每个数字进行分析 每次都是这个数字前面的数字会让它多走一步. 对于每个位置 i 位置上的数字 \(a_i\) \(cnt_i\)表示前面有多少个数字比其大. 那么有 \(i-cnt_i<a_i\)那么就不合法了. 考虑状压 对于字典序可以利用总方案-<=的方案来做 类似数位dp. 期望得分44. code…
[luogu]P2657 低头一族 题目描述 一群青年人排成一队,用手机互相聊天. 每个人的手机有一个信号接收指标,第i个人的接收指标设为v[i]. 如果位置在x[i]的人要和位置在xj的人聊天,那么这两人组成的一对的信号发射强度就是abs(x[i]-x[j])*max(v[i],v[j]). 现在我们想知道,这些人所有对子中的信号发射强度的总和. 输入输出格式 输入格式:第一行一个整数N,接下来N行,每行两个整数v[i]和x[i]. 输出格式:所有对的信号发射强度总和. 输入输出样例 输入样例…
真正的模板题. 树状数组的思想很简单(不如说背代码更简单),每个节点记录多个节点的信息(每个点存x&(-x)个). 道理可以参见很多大佬的博客,最后前缀和的思想搞一下就好了.不想说也不会说. CODE #include<cstdio> using namespace std; typedef long long LL; ; LL tree[N],n,q,i,c,x,y; inline void read(LL &x) { x=; ; ; ch=getchar(); } +ch-…
这题让我升华..还好只重构了一遍 首先我们发现:$n$较小时,整个队伍的形态 跟 $n$ 比较大时的局部是一样的 所以我们预处理出这个队伍的形态,和每一行每个位置的质因子个数的前缀和,$O(nlogn)$,然后每次回答$log(n)$ 方法: 1.线性筛,筛出每个数值因子的个数: 2.然后用一个树状数组,维护整个队列中的还存在的数的数量:相当于统计一个数组(设其为$a$)的前缀和,这个数组以自己为下标,存储这个数还存不存在,即$a[x]=1表示x存在,a[x]=0表示x不存在$:刚开始$a$中都…
题目链接 树状数组套主席树有点难懂qwq 不好理解 树状数组套主席树的直观理解应该是:树状数组的每一个节点是一棵主席树. 普通区间修改我们是创建1个线段树,树状数组套主席树的时候我们就创建log个线段树. 普通区间查询我们是把from-1 和to 两个线段树作差,树状数组套主席树的时候我们就把from-1的前缀和的log个线段树和to的log个线段树作差. 比较玄学qwq 我好像现在还是没懂 放上代码吧 #include<cctype> #include<cstring> #inc…
题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数数加上x 2.求出某一个数的和 输入输出格式 输入格式: 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个数. 第二行包含N个用空格分隔的整数,其中第i个数字表示数列第i项的初始值. 接下来M行每行包含2或4个整数,表示一个操作,具体如下: 操作1: 格式:1 x y k 含义:将区间[x,y]内每个数加上k 操作2: 格式:2 x 含义:输出第x个数的值 输出格式: 输出包含若干行整数,即为所有操作2的结…
显然发现可以二分. 对于n<=100暴力dp f[i][j]表示前i个数分成j段对于当前的答案是否可行. 可以发现这个dp是可以被优化的 sum[i]-sum[j]<=mid sum[i]-mid<=sum[j] 维护一个最大的sumj 即可O(1)转移 复杂度nklog 可以获得 40分. 考虑ai>=0 二分完之后直接贪心即可 能选就选 可以证明 这是最优的或者说对后面结果不会更差. 考虑ai<=0 二分完之后可以发现能分成一段就分成一段 只要分的段数>=k即可.…
[例1]数星星 天空中有一些星星,这些星星都在不同的位置,每个星星都有个坐标,如果一个星星的左下方(包括正左和正下)有k颗星星,就说这颗星星是k级的. 比如,上图中,星星5是3级的(1,2,4在其左下方) 2,4是1级的. 给定星星的位置,输出各级星星的数目. 简述:先按y坐标来排序,就用x来作为参考用树状数组来求解答案(前缀和) 代码 #include<iostream> #include<cstdio> using namespace std; ; ; struct node{…
题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数数加上x 2.求出某一个数的和 输入输出格式 输入格式: 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个数. 第二行包含N个用空格分隔的整数,其中第i个数字表示数列第i项的初始值. 接下来M行每行包含2或4个整数,表示一个操作,具体如下: 操作1: 格式:1 x y k 含义:将区间[x,y]内每个数加上k 操作2: 格式:2 x 含义:输出第x个数的值 输出格式: 输出包含若干行整数,即为所有操作2的结…
题目描述 约翰的N 头奶牛每年都会参加"哞哞大会".哞哞大会是奶牛界的盛事.集会上的活动很多,比如堆干草,跨栅栏,摸牛仔的屁股等等.它们参加活动时会聚在一起,第i 头奶牛的坐标为Xi,没有两头奶牛的坐标是相同的.奶牛们的叫声很大,第i 头和第j 头奶牛交流,会发出max{Vi; Vj}×|Xi − Xj | 的音量,其中Vi 和Vj 分别是第i 头和第j 头奶牛的听力. 假设每对奶牛之间同时都在说话,请计算所有奶牛产生的音量之和是多少. 输入格式 • 第一行:单个整数N,1 ≤ N ≤…
能从iii走到所有跑道 相当于 能从iii走到111和nnn. 边反向后就相当于 能从111和nnn走到iii. 为了方便叙述,把111~nnn叫做x坐标,111~(m+1)(m+1)(m+1)叫做y坐标. 然后我们将图上下翻转(yyy坐标)后,能从111走到iii的话一定经过i−1i-1i−1条向右的边,且这些边的yyy坐标不下降. 那么我们设fl[i]fl[i]fl[i]表示从111走到iii最小加边数量,那么有fl[i]=i−1−LISfl[i]=i-1-LISfl[i]=i−1−LIS这…
https://www.luogu.org/problemnew/show/P3960 树状数组预处理之后直接搞就可以了,也不是很好解释,反正就是一个模拟过程的暴力用树状数组维护,还挺巧妙的. 我为什么考场上想不出来嘤嘤嘤 #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> #include<vector>…
题目链接 https://www.luogu.org/problemnew/show/P3368 树状数组 最基础的用法:https://www.cnblogs.com/yinyuqin/p/10961243.html 在这里实现的是区间加,单点查询. 一说到区间加,我们就会想到差分序列,关于差分序列的用法:https://www.cnblogs.com/yinyuqin/p/10961325.html 所以我们在树状数组中维护的不是单点了,而是差分序列. 为什么要用树状数组呢? 因为归根结底,…
题目链接 https://www.luogu.org/problemnew/show/P3374 树状数组 树状数组最基本的就是求区间和. 维护: 空间复杂度:O(n) 时间复杂度(区间和,单点修改): 修改:O(logn) 查询:O(logn) 用c[i]表示(i-lowbit[i]+1,i)区间的和. 查询时,用到前缀和的思想,(i,j)=c[j]-c[i-1]. 优点 代码简单 缺点 难理解 代码(解析) #include<iostream> #include<cstdio>…
https://www.lydsy.com/JudgeOnline/problem.php?id=3173 插入的数是以递增的顺序插入的 这说明如果倒过来考虑,那么从最后一个插入的开始删除,不会对以某个数结尾的最长上升子序列产生影响 所以 先原序列求出来,输出即可 还原原序列的方法: 可以用平衡树,dfs序就是原序列 嫌麻烦,不想写,所以  树状数组 假设最后一个数是n,插入位置是y, 倒数第二个数是n-1,插入位置是x 那么y就是n的最终位置 如果y在x后面,那么x就是n-1的最终位置 如果y…
BZOJ_5416_[Noi2018]冒泡排序_DP+组合数+树状数组 Description www.lydsy.com/JudgeOnline/upload/noi2018day1.pdf 好题. 合法的排列的交换次数刚好是交换次数的下界,也就是说不能有多余的交换. 也就是对于ai这个数,只能从i到ai这一个方向走. 考虑x,y,z三个数(x>y>z),y需要和x.z各交换一次,这显然不能使y这个数满足只向一个方向移动这个条件. 于是转化为排列的连续下降子序列最多为2. 考虑DP,设f[i…
https://www.luogu.org/problemnew/show/T45887 题目背景 重阳节到了,我们最好的八重樱拥有全村最好的嘤嘤刀…… 题目描述 在绯玉丸力量的影响下,八重村成了一条长度为 nnn 的八重街,并且绯玉丸可以带着八重樱出现在街上的任意地点.而我们的八重樱则会在街上任意穿梭来获取某一地点上的嘤嘤嘤能量,用以升级她的嘤嘤刀. 在每个时刻,都会发生以下 333 个事件: 111 xxx valvalval 表示在 xxx 地点出现了携带着 valvalval 点嘤嘤嘤能…
Luogu 2680 NOIP 2015 运输计划(树链剖分,LCA,树状数组,树的重心,二分,差分) Description L 国有 n 个星球,还有 n-1 条双向航道,每条航道建立在两个星球之间,这 n-1 条航道连通了 L 国的所有星球. 小 P 掌管一家物流公司,该公司有很多个运输计划,每个运输计划形如:有一艘物 流飞船需要从 ui 号星球沿最快的宇航路径飞行到 vi 号星球去.显然,飞船驶过一条航道 是需要时间的,对于航道 j,任意飞船驶过它所花费的时间为 tj,并且任意两艘飞船之…
传送门:Problem 4375 参考资料: [1]:https://www.cnblogs.com/Miracevin/p/9662350.html [2]:https://blog.csdn.net/lengxuenong/article/details/80482202?utm_source=blogxgwz1 今天已经理解了一晚上了,还是处于懵懵懂懂的状态,明天在肝一天,一定要将自己理解的题解写出来,哇咔咔,,,,, 题解: 定义数组 a[maxn] 先将含有 N 个元素的数组a离散化,…
结论:每次把字符丢到最外面最优,用树状数组统计答案,把字符放到最外边后可以当成消失了,直接在树状数组上删掉就好. 感性理解是把字符丢到中间会增加其他字符的移动次数,但是丢到外面不会,所以是正确的. #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #define ll long long using namespace std; ; int n, x, num; ]…
链接:https://www.luogu.org/problemnew/show/P3031 题面: 题目描述 Farmer John has lined up his N (1 <= N <= 100,000) cows in a row to measure their heights; cow i has height H_i (1 <= H_i <= 1,000,000,000) nanometers--FJ believes in precise measurements…
链接:https://ac.nowcoder.com/acm/contest/308/D 来源:牛客网 tokitsukaze and Inverse Number 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 tokitsukaze给你一个长度为n的序列,这个序列是1到n的一种排列. 然后她会进行q次操作.每次操作会给你L R k这三个数,表示区间[L,R]往右移动k次. 移动一次的…
[BZOJ 3295] [luogu 3157] [CQOI2011] 动态逆序对 (树状数组套权值线段树) 题面 给出一个长度为n的排列,每次操作删除一个数,求每次操作前排列逆序对的个数 分析 每次都对整个序列求逆序对显然不行,考虑每次删除对逆序对个数的影响 假如删除的数为x,x在序列中的位置为pos[x],那么包含x的逆序对个数为位置在[1,pos[x]-1]中大于x的数+位置在[pos[x]+1,n]中小于x的数,每次删除只要减去这些就可以了 那么这个问题其实就转化成查询位置在[L,R]内…
Description 给定一个 \(n\) 个顶点,\(m\) 条边的无向联通图,点.边带权. 先有 \(q\) 次修改或询问,每个指令形如 \(\text{opt}\ x\ y\): \(\text{opt}=1\):将顶点 \(x\) 的点权修改为 \(y\): \(\text{opt}=2\):查询顶点 \(x, y\) 间所有路径中路径上最大值中,最小的哪一个最大值(瓶颈路). \(\text{opt}=3\):查询顶点 \(x\) 可以结果边权 \(\le y\) 的边能到达的所有点…
题目背景 蕾米莉亚的红雾异变失败后,很不甘心. 题目描述 经过上次失败后,蕾米莉亚决定再次发动红雾异变,但为了防止被灵梦退治,她决定将红雾以奇怪的阵势释放. 我们将幻想乡看做是一个n*m的方格地区,一开始没有任何一个地区被红雾遮盖.蕾米莉亚每次站在某一个地区上,向东南西北四个方向各发出一条无限长的红雾,可以影响到整行/整列,但不会影响到她所站的那个地区.如果两阵红雾碰撞,则会因为密度过大而沉降消失.灵梦察觉到了这次异变,决定去解决它.但在解决之前,灵梦想要了解一片范围红雾的密度.可以简述为两种操…
题目背景 面对蚂蚁们的疯狂进攻,小FF的Tower defence宣告失败……人类被蚂蚁们逼到了Greed Island上的一个海湾.现在,小FF的后方是一望无际的大海, 前方是变异了的超级蚂蚁. 小FF还有大好前程,他可不想命丧于此, 于是他派遣手下最后一批改造SCV布置地雷以阻挡蚂蚁们的进攻. 题目描述 小FF最后一道防线是一条长度为N的战壕, 小FF拥有无数多种地雷,而SCV每次可以在[ L , R ]区间埋放同一种不同于之前已经埋放的地雷. 由于情况已经十万火急,小FF在某些时候可能会询…
题目背景 盛夏,冰之妖精琪露诺发现了一大片西瓜地,终于可以吃到美味的冻西瓜啦. 题目描述 琪露诺是拥有操纵冷气程度的能力的妖精,一天她发现了一片西瓜地.这里有n个西瓜,由n-1条西瓜蔓连接,形成一个有根树,琪露诺想要把它们冷冻起来慢慢吃. 这些西瓜蔓具有神奇的性质,可以将经过它的冷气的寒冷程度放大或缩小,每条西瓜蔓放大/缩小冷气寒冷程度的能力值为Wi,表示冷气经过它后,寒冷程度值x会变为x*wi.每个西瓜也有一个寒冷程度值,炎热的夏日,所有西瓜的寒冷程度值初始都为0. 琪露诺会做出两种动作: ①…
将纵向固定,每次在横向找两个点,计算其中间墓地的贡献答案,离散化后同一行的预处理个数, 树状数组内存储C[up[i]][k] * C[down[i][k] 的值,每次更新时 down[横坐标]++; c[up[i]][k]*C[down[i]][k] - C[up[i]+1][k]*C[down[i]-1][k] 加入这个值即可 左右答案利用 lf(左侧点数)计算 详见代码 #include<bits/stdc++.h> #define int long long #define rep(i,…
题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某一个数加上x 2.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个数. 第二行包含N个用空格分隔的整数,其中第i个数字表示数列第i项的初始值. 接下来M行每行包含3个整数,表示一个操作,具体如下: 操作1: 格式:1 x k 含义:将第x个数加上k 操作2: 格式:2 x y 含义:输出区间[x,y]内每个数的和 输出格式: 输出包含若干行整数,即为所有操作2的结果.…
此题一看便是RMQ问题,但是由于开平方的特殊操作,tag操作失效 此时发现特性:sqrt最多执行6此便使值到达1/0,此时可以剪枝不进行该操作,利用并查集到达特性找根,根代表还可以进行操作的点,再利用树状数组简单的操作便可以AC #include<bits/stdc++.h> #define rep(i,x,y) for(register ll i=x;i<=y;i++) #define ll long long using namespace std; ; inline ll read…