
树状数组
璇玑你没有心
这个作者很懒,什么都没留下…
展开
-
只能交换相邻两数得到相应序列 树状数组
有两个序列对于序列b,每次只能交换相邻两个数求将序列b变成序列a需要的最小交换数套路都是一样的:把序列每个值对应一个升序的值,然后把b用a来转换,再把b变成1...n的升序的最小值,就是求逆序对的数量来个例子:a 1 4 2 3b 3 2 4 1把a中每个数与列数对应:1 -> 1 4 -> 2 2 -> 3 3 -> 4那么我们就可以把a看成 1 2 3 4那么把b每个数用相同的转换规则转换 b : 4 3 2 1把b变成a即把b变成升序原创 2022-05-11 23:56:50 · 653 阅读 · 0 评论 -
Array Optimization by Deque (cf)树状数组
原题链接:Problem - 1579E2 - Codeforces今天学了树状数组,好牛,一个题想了一晚上才明白呜呜1.首先这个题要想明白,每次插入一个数的时候,如果这个数插在队列的最前面,那么对ans有贡献的就是所有小于这个数的个数;如果插在队列的最后面,那么对ans有贡献的就是所有大于这个数的个数。因此也可以想到,每次插入一个数的时候,与前面的那些数的排列顺序无关,只跟它自己插在最前面还是最后面有关,所以找到前面和后面贡献的最小值就ok了。2.数的范围较大,可以离散化将每个数变成.原创 2021-11-13 22:51:46 · 504 阅读 · 0 评论 -
F2. Promising String (hard version)(cf)树状数组
原题链接:Problem - F2 - Codeforces题目大意:给你一个长度为n的字符串,仅包含'+'和'-'字符。两个连续的'-'可以变为'+',问你有多少子串,可以进行任意次数的两个连续的'-'变为'+'的操作,使得最后的这个串里'-''+'数量相同。问你有多少子串,存在可以满足这样数量的子串。思路:其实可以发现,'-'的数量一定是会大于等于'+'的数量,而且它们之差余3得为0,所以相当于维护树状数组的三种状态,然后从前往后查询和加入到数组数组中。如果后面有值与前面的值对3余数一样大,那原创 2022-04-01 11:12:37 · 747 阅读 · 0 评论 -
小沙的remake(牛客)排序+ 树状数组 + dp
原题链接:登录—专业IT笔试面试备考平台_牛客网把a[i]先排序(带着下标排),然后从小到大每次先找下标在范围之内 [ i − b i , i ) 的所有种数,然后加一就是以a[i]为最后一个元素的所有种数。因为数据可能会很大,每次更新树状数组中的值的时候记得取模。如果有相减的时候,记得要加mod再取模。AC代码:#include<bits/stdc++.h>using namespace std;#define INF 0x3f3f3f3ftypedef pair<原创 2022-03-29 18:52:40 · 1909 阅读 · 0 评论