随笔分类 - 树状数组
摘要:LIANJIE:http://poj.org/problem?id=3321给你一个多叉树,每个叉和叶子节点有一颗苹果。然后给你两个操作,一个是给你C清除某节点上的苹果或者添加(此节点上有苹果则清除没苹果就添加)q询问这个节点的子树上有多少个苹果。直接dfs遍历一遍,每个节点给一个时间戳,记录一下遍历玩这个节点是的始终时间戳,直接对时间戳进行询问即可。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #define loop(s,...
阅读全文
摘要:连接:http://acm.hdu.edu.cn/showproblem.php?pid=4638题意:就给给你n个数(大小在1-n里),然后给你连续的可以构成一个块,再给你N个询问,每个询问一个l,一个r问你l-r里面有多少个连续的段其实每一个数都是一个独立的段,当有连续的时候连续段数就会-1,因为连续的段中,位置最靠前的哪一个只会影响以这个位置为l的询问,不会影响后面的,所以,我们可以对询问从后向前去找,离线话去找。这样的话就可以用树状数组去解决问题、 1 #include 2 #include 3 #include 4 #include 5 #include 6 #...
阅读全文
摘要:题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=4630题意:给你N个数,然后给你M个询问,每个询问包含一个l 一个r,问你lr 这个区间中任意两个数最大的公约数。思路:以为是l,r所以,只跟l后面的有关,所以把询问排序,数组a[]从后往前枚举约数,标记下这个约数最早出现的位置,如果这个约数出现了,那就让这个数更新一下最大的保存在树状数组中,如果没出现,那么就标记一下位置就好~这样的后面的答案会影响前面的但是前面的不会影响后面的。 1 #include 2 #include 3 #include 4 #include 5 #inc...
阅读全文
摘要:题意:给你一个字符串和m个询问,问你l,r这个区间内出现过多少字串。连接:http://acm.hdu.edu.cn/showproblem.php?pid=4622网上也有用后缀数组搞得、思路(虎哥):用字典树把每一个字符串对应成一个整数 相同的字符串对应到相同的整数上把所用的串对应的整数放在一个数组里 比如书字符串s[l...r]对应的整数是 k那么二维数组 [l][r] 就等于k假设一个对应好的二维数组左下角是原点3 4 5 22 3 4 01 6 0 02 0 0 0这样求解 从l到r的不同字符串的个数 其实就是求 从[l][r] 到右下角所在的矩阵所包含不同整数的个数(不包括0)这里
阅读全文
摘要:题意:给你一棵二叉树,每个节点有一个w值,现在有一颗小球,值为x,从根节点往下掉,如果w==x,那么它就会停止;如果w>x,那么它往左、右儿子的概率都是1、2;如果w 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #define cl(a,b) memset(a,b,sizeof(a)) 9 #define loop(s,i,n) for(i = s;i q[maxn]; 27 int ans[maxn][2]; 28 int cnt; 29 int lowbit(int x)...
阅读全文
摘要:题目连接:题意:要求设计这样一个数据结构,支持下列操作1.add(x,y,a).对二维数组的第x行,第y列加上a.2.sum(l,b,r,t).求所有满足l 2 #include 3 #include 4 #include 5 #define loop(s,i,n) for(i = s;i 0;i -= lowbit(i))25 {26 for(j = b;j > 0;j -= lowbit(j))27 res+=c[i][j];28 }29 return res;30 }31 int main()32 {33 int t...
阅读全文

浙公网安备 33010602011771号