摘要:
原文地址:http://www.cppblog.com/MatoNo1/archive/2011/03/19/142226.html树状数组在区间求和问题上有大用,其三种复杂度都比线段树要低很多……有关区间求和的问题主要有以下三个模型(以下设A[1..N]为一个长为N的序列,初始值为全0):(1)“改点求段”型,即对于序列A有以下操作:【1】修改操作:将A[x]的值加上c;【2】求和操作:求此时A[l..r]的和。这是最容易的模型,不需要任何辅助数组。树状数组中从x开始不断减lowbit(x)(即x&(-x))可以得到整个[1..x]的和,而从x开始不断加lowbit(x)则可以得到x 阅读全文
posted @ 2013-08-20 20:11
冰鸮
阅读(199)
评论(0)
推荐(0)
摘要:
题意:求区间内不同的数的和离线处理,按查询右端点从小到大排序,从左往右扫一遍。记录每个数出现的上一个位置,如果该数之前没有出现过,就加上,否则就在上一个位置减去。#include #include #include #include #define LL long long intusing namespace std;const int MAXN = 1000100;struct node{ int id; int l, r;};int N, Q;int pre[MAXN]; //某数之前出现的位置LL sum[50100];LL val[50100];int maxL... 阅读全文
posted @ 2013-08-20 20:03
冰鸮
阅读(174)
评论(0)
推荐(0)
摘要:
http://blog.csdn.net/acm_cxlove/article/details/7548087感觉最巧的是定义了min_dis……将区间内有无英雄升级分开处理#include #include #include #include #define lson l, m, rt > 1; build( lson ); build( rson ); return;}void PushDown( int rt ){ if ( Tr[rt].flag ) { Tr[lc].exp += Tr[rt].flag * Tr[lc].level; ... 阅读全文
posted @ 2013-08-20 10:38
冰鸮
阅读(333)
评论(0)
推荐(0)

浙公网安备 33010602011771号