题目链接 18年沈阳网赛的题,一直想补但一直鸽着,终于还是补上了 一棵树,点带权,支持两种操作: 1.深度d上的权值加上x 2.询问子树u下的权值和 对每个深度按结点数量分类,结点数小于$sqrt(n)$的为1类,其余的为2类 对于1类深度,修改时暴力修改每个结点的值,查询时用树状数组 对于2类深度 ...
分类:
编程语言 时间:
2020-03-01 21:30:05
阅读次数:
98
本博客只适于普及组二等奖食用 oj:https://loj.ac/problems , https://www.luogu.com.cn/ 目录: 单源最短路径 ST表 树状数组1 树状数组2 线段树1 线段树2 缩点(Tarjan) 割点(割顶) LCA 平衡树 负环 差分约束系统 矩阵快速幂 矩 ...
分类:
其他好文 时间:
2020-02-28 15:43:27
阅读次数:
68
有一类求一段区间内所有数字的和的问题,以前我是用前缀和数组解决的。今天遇到了二维的树状数组,发现它的代码非常优美,就把这两者一起写一写吧。1. 一维前缀和数组假设共有n个数字,我们把它们存放在a数组中12for (int i=1;i>a[i];然后,我们用sum[i]表示a[1]+a[2]+…+a[... ...
分类:
编程语言 时间:
2020-02-28 12:00:49
阅读次数:
54
1 int lowbit(int x) { 2 return x & -x; 3 } 4 5 void add(int x, int y) { 6 for (int i = x; i <= n; i += lowbit(i)) 7 c[i] += y; 8 } 9 10 int ask(int x) ...
分类:
编程语言 时间:
2020-02-28 01:36:38
阅读次数:
75
# 支持的操作 1)快速求前缀和 O(log n) 2) 修改某一个数 O(logn) # 原理 原数组的长度为x的话,x的二进制为(下标从 1 开始) x = 2i1+2i2+2i3+.......+2im 那么按照x的二进制可以讲区间划分为 log x 个区间。分别为 [ x-2i1+1 +1 ...
分类:
编程语言 时间:
2020-02-28 01:06:07
阅读次数:
66
这题一开始把我看愣了。难道是线段树套树状数组?空间根本开不下好不好!!! 后来想到维护区间极值,从而排除不必要情况,降低复杂度。 无需修改,码量顿减…… 注意,同一组数据放一行,注意行末空格。 #include<bits/stdc++.h> using namespace std; #define ...
分类:
其他好文 时间:
2020-02-25 17:28:49
阅读次数:
63
int c[50005]; //对应原数组和树状数组 int lowbit(int x){ return x&(-x); } void updata(int i,int k){ //在i位置加上k while(i <= n){ c[i] += k; i += lowbit(i); } } int g ...
分类:
编程语言 时间:
2020-02-25 09:54:54
阅读次数:
81
题意 让你构造一个长度为n的序列,记为p1……pn,(这个序列是1~n的全排列的一种) 给你n个数,记为s1……sn,si的值为p1……pi-1中小于pi的数的和。 思路 显然,应该倒着来,也就是从pn 开始构造,这样的话,当要填pi 的时候,p1到pi-1就是所有的还未填的数,那么我们只需要去找哪 ...
分类:
编程语言 时间:
2020-02-19 00:35:40
阅读次数:
92
分析:我们可以逆向考虑(因为正向的话由于第一位的逆序对数一定是0,算不出什么),对于第i个数,它使逆序对的数量增加了temp=num[i]-num[i-1],即区间【1,i-1】内比这个数大的有temp个,即它在i个数中从小到大排在(i-temp)个,那么找到这个数即可。 对于答案序列来讲,他是一个 ...
分类:
编程语言 时间:
2020-02-17 23:51:27
阅读次数:
82
"题目链接" ac代码(注意字符读入前需要注意回车的影响) ...
分类:
编程语言 时间:
2020-02-16 01:39:45
阅读次数:
74