HDU 5147 Sequence II 【树状数组维护信息 + 后缀和思想】
2018-01-20 00:56
471 查看
传送门
// 给定一个四元组的定义, 问在n个数中有多少个这样的四元组. 具体定义请看题目~
// 那么也很明显的就是我们需要枚举中间一个值然后找旁边的两个满足的东西. 这里我枚举的是b, 那么对于一个下标i, 我们看它前面有多个比它小的, 以及后面有多少个二元组满足i < j && a[i] < a[j] , 前面那个信息很好维护就是扫一遍然后用树状数组维护下就行啦. 那么如何维护一个数后面有多少个可行性二元组了 ?
我们把信息进行拆解, 也就是二元组中也要满足一个顺序关系, 那么也可以用树状数组维护, 那么我们如何要一个下标后面的所有二元组了, 此时我们就需要用到后缀和的思想了, 也就是我们从后往前枚举对于每一个满足的二元组进行后缀求和那么就是一个下标的右边所有满足的条件的二元组个数了~~~ 具体细节请看代码.
AC Code
// 给定一个四元组的定义, 问在n个数中有多少个这样的四元组. 具体定义请看题目~
// 那么也很明显的就是我们需要枚举中间一个值然后找旁边的两个满足的东西. 这里我枚举的是b, 那么对于一个下标i, 我们看它前面有多个比它小的, 以及后面有多少个二元组满足i < j && a[i] < a[j] , 前面那个信息很好维护就是扫一遍然后用树状数组维护下就行啦. 那么如何维护一个数后面有多少个可行性二元组了 ?
我们把信息进行拆解, 也就是二元组中也要满足一个顺序关系, 那么也可以用树状数组维护, 那么我们如何要一个下标后面的所有二元组了, 此时我们就需要用到后缀和的思想了, 也就是我们从后往前枚举对于每一个满足的二元组进行后缀求和那么就是一个下标的右边所有满足的条件的二元组个数了~~~ 具体细节请看代码.
AC Code
const int maxn = 5e4+5; int cas=1; int c[maxn], a[maxn]; int n; void add(int x) { for(;x<=n;x+=x&-x) c[x]++; } int getsum(int x) { int res=0; for(;x;x-=x&-x) res += c[x]; return res; } int l[maxn], r[maxn]; void solve() { scanf("%d", &n); Fill(c, 0); for (int i = 1 ; i <= n ; i ++) { scanf("%d", &a[i]); l[i] = getsum(a[i]); add(a[i]); } Fill(c, 0); Fill(r, 0); for (int i = n ; i >= 1 ; i --) { r[i] = getsum(n) - getsum(a[i]) + r[i+1]; add(a[i]); } ll ans = 0; for (int i = 2 ; i <= n - 2 ; i ++) { ans += 1ll*l[i]*r[i+1]; } printf("%lld\n", ans); }
相关文章推荐
- hdu 5147 Sequence II 树状数组
- HDU 5147 Sequence II 树状数组
- Hdu 5147 Sequence II(树状数字 or 线段树 + 输入外挂 前缀和+后缀和)
- HDU 5147 Sequence II (线段树求前缀和、后缀和)
- hdu 5147 Sequence II(前缀和,后缀和)
- [ACM] hdu 5147 Sequence II (树状数组,前缀和,后缀和)
- [HDU 5147] Sequence II (树状数组+前缀和)
- hdu 5147 Sequence II(树状数组,前缀和,后缀和)
- HDU-1540 Tunnel Warfare (线段树 维护端点信息)
- hdu 5147 Sequence II
- HDU 5869 Different GCD Subarray Query (GCD种类预处理+树状数组维护)
- 【CUGBACM15级BC第23场 B】hdu 5147 Sequence II
- 杭电hdu 5147 Sequence II (树状数组)
- hdu 5147 Sequence II
- hdu 5147 Sequence II(树状数组)
- hdu 3397 Sequence Operation 线段树维护区间前后缀和,求子区间连续最值
- HDU 4302 Holedox Eating (二分+树状数组维护)
- HDU 2227 Find the nondecreasing subsequences dp思想 + 树状数组
- HDU 4947 GCD Array 反演+树状数组维护
- HDU-4622 Reincarnation 后缀数组 | Hash,维护和,扫描