摘要: 题意:有一群小朋友围成一个环,编号1,2,3…N。每个人手上握着一个非0的数字,首先第K个人出列,然后看他手上的数字,假设为m,则从下一个开始第m个人出列,一直如此。并设i为小于等于N的最大反素数,问第i个出列的人得编号,i的约数个数。(设g(i)为i的约数的个数,若任意j#include #include using namespace std;#define maxn 100005int maxsub[maxn>1; build(l, m, rt>1; if (m >= target) update(target, val, l, m, rt<<1); els 阅读全文
posted @ 2013-07-25 17:17 某某。 阅读(201) 评论(0) 推荐(0) 编辑
摘要: 问题描述:给定一个环形序列,进行在线操作,每次修改一个元素,输出环上的最大连续子列的和,但不能是完全序列。算法:把环从一个地方,切断拉成一条直线,用线段树记录当前区间的非空最大子列和当前区间的非空最小子列。动态规划解决过静态的序列最大连续子序列和问题,时间复杂度可以达到 n(环形序列可能复杂度更高)。但是这里涉及到动态更新,更新频度很大,如果计算子序列和复杂度仍然是n,就会非常耗时。如果环上的数都是正整数,答案是:环上数的总和-根结点的非空最小子列;否则,答案是:max{根结点的非空最大子列, 环上数的总和-根结点的非空最小子列}一开始想到,如果将环从一点断开,那么最大和如果包括断点的最后一个 阅读全文
posted @ 2013-07-25 17:14 某某。 阅读(258) 评论(0) 推荐(0) 编辑
摘要: 题目连接:题意:要求设计这样一个数据结构,支持下列操作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... 阅读全文
posted @ 2013-07-25 12:00 某某。 阅读(146) 评论(0) 推荐(0) 编辑
摘要: 题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=4604思路:就是模拟一下,求每一个开始的非上升和非下降序列。然后求重复的数,由于求出来可能不会是我们想要的序列如22221122233这样的话求出来的会是2222222 222222233,而我们想要的到的是112222,所以不能用普通的,而是用N*logN(当然也是因为数列太长),而我们得到的是1122222多处一个2这个2是11之前留下的,但是因为2比1大才留下,那么2一定会留在最长上升里面,所以2是会被算作重复的减掉。代码: 1 #include 2 #include 3 #incl... 阅读全文
posted @ 2013-07-25 11:54 某某。 阅读(352) 评论(0) 推荐(0) 编辑