2012年9月8日
摘要: HDU_4267 根据k的值建立10类树状数组,每类中根据i%k的不同建立k棵树状数组,也就是55棵树状数组,这样每次修改操作只对其中1棵树状数组进行操作,所以是O(logN)的复杂度,每次查询只对其中10棵树状数组统计增量和,所以是O(10*logN)的复杂度。#include<stdio.h>#include<string.h>#define MAXD 50010int N, M, d[100][MAXD], a[MAXD];void insert(int k, int x, int v){ for(; x <= N; x += x & -x) d[k 阅读全文
posted @ 2012-09-08 21:33 Staginner 阅读(1485) 评论(0) 推荐(0) 编辑
摘要: HDU_4348 用可持久化线段树就可以实现O(1)的back操作,同时如果想效率比较高的话,推荐用单点修改+区间查询的模式替代下传标记的区间修改+区间查询的模式来完成对区间和的查询。 至于如何不下传标记就能完成区间修改和区间求和可以参考ZKW的《统计的力量--线段树》的第59~60页。#include<stdio.h>#include<string.h>#define MAXD 100010typedef long long LL;int N, M, node, T[MAXD], np[MAXD];LL A[MAXD];struct SegTree{ int ls, 阅读全文
posted @ 2012-09-08 10:39 Staginner 阅读(865) 评论(0) 推荐(0) 编辑