题意:给一串数字,每次查询[L,R]中两个数的gcd的最大值。解法:容易知道,要使取两个数让gcd最大,这两个数最好是倍数关系,所以处理出每个数的所有倍数,两两间根据倍数关系形成一条线段,值为该数。那么每次查询[L,R]之间两数gcd的最大值即为查询[L,R]中值最大的线段,离线所有的查询数据,然后...
分类:
其他好文 时间:
2014-09-23 21:45:35
阅读次数:
249
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2492
Ping pong
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 4011 Accepted Submission(...
分类:
其他好文 时间:
2014-09-23 20:49:15
阅读次数:
286
需要维护前缀和 S[i]=A[1]+A[2]+...+A[i]。
引入 “树状数组”,它的修改与求和都是 O(logn) 的,效率很高。
分类:
其他好文 时间:
2014-09-22 18:09:02
阅读次数:
187
士兵杀敌(二)
时间限制:1000 ms | 内存限制:65535 KB
难度:5
描述
南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的。
小工是南将军手下的军师,南将军经常想知道第m号到第n号士兵的总杀敌数,请你帮助小工来回答南将军吧。
南将军的某次询问之后士兵i可能又杀敌q人,之后南将军再询问的时候,需要考虑到新增的杀敌数。
...
分类:
其他好文 时间:
2014-09-21 20:49:31
阅读次数:
225
题目大意:给出一棵无根树。开始的时候你在1号节点。有两种操作:1.求你的位置到x的位置的距离,然后你走到x点。2.把第x条边边权改成y。
思路:裸地树链剖分。当然正解不是树链剖分,是DFS序+树状数组。没时间想太多就写了个链剖。
CODE:
#include
#include
#include
#include
#define MAX 200010
#defi...
大意:N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a 2 #include 3 #include 4 using namespace std; 5 6 const int maxn = 100005; 7 int num[maxn]; 8 9 int ...
分类:
其他好文 时间:
2014-09-19 20:54:26
阅读次数:
266
dp[i][j] 表示以i结尾的长度为j的递增子序列dp[i][j] = sum(dp[k][j]) ka[j]如果只是单纯的循环for(j=2; j a[j]) dp[i][j] += dp[k][j-1];时间复杂度是O(n * n * m) TLE但是k循环可以用树状数组来优化,...
分类:
其他好文 时间:
2014-09-19 19:07:35
阅读次数:
210
看完题解自己敲了一遍 还需要加深理解吧#include#include#includeusing namespace std;int c[50000],num[50000];int N=32100;int lowbit(int x){ return x&(-x);}int sum(int x)...
分类:
其他好文 时间:
2014-09-18 22:01:34
阅读次数:
141
给定一个区间,如果要频繁修改该区间内的元素,且频繁查询该区间内任意小区间的元素之和时,可以用树状数组。普通的一次修改时间复杂度是O(1),而查询的时间复杂度是O(n). 树状数组的修改和查询的时间复杂度均为O(logn)给定区间1-->n,区间内对应的元素为a[i] (1 = 1) 5 {...
分类:
其他好文 时间:
2014-09-18 20:29:04
阅读次数:
168
题目链接:poj 2828 Buy Tickets
题目大意:给定N,表示有个人,给定每个人站入的位置,以及这个人的权值,现在按队列的顺序输出每个人的权值。
解题思路:第K大元素,很巧妙,将人入队的顺序倒过来看,就是纯第K大问题,然后用树状数组还是线段树就都可以做了。
C++ 线段树#include
#include
#include
using namespace std;...
分类:
其他好文 时间:
2014-09-18 19:03:14
阅读次数:
196