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
ST表算法入门详解 关于ST表,有很多文章,这里本蒟蒻也来发一波~~ 希望能为您提供帮助~~ 1.ST表的介绍 ST表算法全称Sparse-Table算法,是由Tarjan提出的一种解决RMQ问题(区间最值)的强力算法。离线预处理时间复杂度 θ(nlogn),在线查询时间 θ(1),可以说是一种非常 ...
分类:
编程语言 时间:
2020-02-25 12:57:11
阅读次数:
101
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
这样的数据结构称作树状数组,它支持O(logN)的单点修改和区间查询,效率高并且代码简洁,缺点在于适用范围不如线段树广。不难看出(雾),tree[i]表示a[i]及之前的 lowbit(i)个 数,定义lowbit(i)等于取i的二进制中最后一个'1'表示的大小观察发现(。),修改a[i]只需更新包 ...
分类:
编程语言 时间:
2020-02-16 01:10:00
阅读次数:
72