上一页 1 2 3 4 5 6 7 ··· 25 下一页
摘要: 把数值和查询放在一起从小到大排序,纪录每个数值的位置,当遇到数值时就更新到树状数组中,遇到查询就直接查询该区间和。#include #include #include #include using namespace std;const int MAXN = 200100;struct node{ int id; int L, R; int val;} qq[MAXN];int N, Q;int cntQ;int ans[MAXN/2];int C[MAXN];bool cmp( const node& a, const node& b ){ if ( a.val ==... 阅读全文
posted @ 2013-10-11 22:51 冰鸮 阅读(239) 评论(0) 推荐(0) 编辑
摘要: 水题,练习一下树状数组实现区间更新。对于每个区间,区间左端点+1,右端点的后一位-1,查询每个位置的覆盖次数#include #include const int MAXN = 100005;int N, C[MAXN];int lowbit( int x ){ return (-x)&x;}void update(int x, int add){ for(int i = x; i 0; i -= lowbit(i)) ret += C[i]; return ret;}int main(){ while( scanf("%d", &N)== 1 && 阅读全文
posted @ 2013-10-10 20:07 冰鸮 阅读(225) 评论(0) 推荐(0) 编辑
摘要: 这题跟ZOJ 3606的解题思路很相似。题意:有3中操作:1.向集合中增加一个数x(1≤x≤1e9);2.从集合中删去一个数x(保证这个数存在);3.查询集合中所有位置满足i%5==3的数a[i]的和,集合中的数按升序排列。给你一共N个操作,输出每次查询的和。做法:因为操作只有10^5个,所以将所有查询中的数保存下来,排序之后离散化。每个数对应一个“位置”,通过标记这个“位置”是否已用来表示该数是否在集合中。线段树节点记录两个信息:cnt:这一段“位置”中含有多少个数,pushUp的时候cnt[rt] = cnt[ rt #include #include #include #define L 阅读全文
posted @ 2013-10-10 19:39 冰鸮 阅读(274) 评论(5) 推荐(0) 编辑
摘要: 这题主要考察观察能力。2^63最多只需要开7次根号就会变成1,当数字变成1之后就不需要再对其进行操作。对于含有大于1数字的区间,向下更新。对于数字全为1的区间,直接返回。#include #include #include #include #include #define LL long long int#define lson l, m, rt > 1; build(lson); build(rson); PushUp( rt ); return;}void Update( int L, int R, int l, int r, int rt ){ if ( ... 阅读全文
posted @ 2013-10-10 17:07 冰鸮 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 每个点求一次最短路,在最短路中找最长的。用邻接表存边,尽量不要用STL,很容易超时。#include #include #include #include using namespace std;const int MAXN = 1010;const int INF = 1 n = n; this->m = 0; for ( int i = 0; i d[u] + 1 ) { d[v] = d[u] + 1; Q[tail++] = v; ... 阅读全文
posted @ 2013-10-10 15:23 冰鸮 阅读(242) 评论(0) 推荐(0) 编辑
摘要: 题目:问n个节点构成完全对称的树有多少种方法。因为树是完全对称的,所以它的子树也是完全对称的。对于每个树,拿出一个根节点,枚举剩下的节点能拆分成多少个子树。#include #include #include #include #define LL long long intusing namespace std;const int MAXN = 1010;const LL MOD = 1e9 + 7;LL dp[MAXN];int main(){ dp[1] = 1; for ( int i = 2; i <= 1000; ++i ) { int v = i ... 阅读全文
posted @ 2013-10-09 22:04 冰鸮 阅读(214) 评论(0) 推荐(0) 编辑
摘要: 没什么巧办法,直接搜就行。用余数作为每个节点的哈希值。#include #include #include const int MAXN = 10100;struct node{ int mod; int fa; int digit; node() {} node( int mod, int fa, int dig ):mod(mod), fa(fa), digit(dig) { }};int N;bool ok[12];bool vis[MAXN];node Q[MAXN << 2];void findFa( int u ){ if ( u == -1 )... 阅读全文
posted @ 2013-10-09 21:15 冰鸮 阅读(204) 评论(0) 推荐(0) 编辑
摘要: 求覆盖三次及其以上的长方体体积并。这题跟http://wenku.baidu.com/view/d6f309eb81c758f5f61f6722.html 这里讲的长方体体积并并不一样。因为本题Z坐标范围非常小,所以可以离散化Z坐标,枚举每个体积块。对每一个体积块:用底面积*高求其体积。底面积直接用“线段树求长方形面积并”来得到即可。对于覆盖次数,pushUp的时候:1.满足 当前覆盖次数大于等于3的,直接求线段长。2.小于3的,由 左右儿子覆盖次数=3 - 当前覆盖次数 的两个儿子更新上来得到。#include #include #include #include using namespa 阅读全文
posted @ 2013-10-09 18:33 冰鸮 阅读(273) 评论(0) 推荐(0) 编辑
摘要: 这个……真心看不出来是个DP,我在树状数组的康庄大道上欢快的奔跑了一下午……看了题解才发现错的有多离谱。参考:http://www.cnblogs.com/kuangbin/archive/2012/11/11/2765329.html#include #include #include #include #define LL long long intusing namespace std;const int MAXN = 1000100;int val[MAXN];int pos[MAXN];int cnt[MAXN];int diff[MAXN];bool vis[MAXN];LL dp 阅读全文
posted @ 2013-10-07 18:20 冰鸮 阅读(525) 评论(0) 推荐(0) 编辑
摘要: 考虑对立情况,不漂亮的串的形式必然为GGGGR……R……RGGGG相邻R之间的距离为奇数且相等。#include #include #include #define LL long long intusing namespace std;const int MAXN = 888;const LL MOD = 1000000007;char str[MAXN];int main(){ int T; scanf( "%d", &T ); while ( T-- ) { scanf( "%s", str ); int len = strlen(st.. 阅读全文
posted @ 2013-10-04 22:59 冰鸮 阅读(313) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 ··· 25 下一页