IT民工
加油!
摘要: 这道题的离散化很巧妙,参考了胡浩大神的代码。自己先理解下http://www.notonlysuccess.com/大神的博客/*Accepted 1120K 79MS C++ 2109B 2012-07-24 17:40:47*/#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define lson l, m, rt << 1#define rson m + 1, r, rt << 1 | 1const int MAXN = 11111 阅读全文
posted @ 2012-07-24 17:47 找回失去的 阅读(175) 评论(0) 推荐(1) 编辑
摘要: 颜色种类不大于三十,可以用二进制来加速。每个二进制代表一种颜色,用位或运算来更新颜色记录,最后求和只要看结果有几个二进制为1就行。/*Accepted 2224K 297MS C++ 2156B 2012-07-24 16:39:26*/#include<cstdio>#include<cstring>#include<cstdlib>#include<algorithm>using namespace std;#define lson l, m, rt << 1#define rson m + 1, r, rt << 1 阅读全文
posted @ 2012-07-24 16:46 找回失去的 阅读(204) 评论(0) 推荐(0) 编辑
摘要: 线段树的成段更新,区间求和基础题。/*Accepted 4284K 1750MS C++ 1946B 2012-07-24 14:01:14*/#include<cstdio>#define lson l, m, rt << 1#define rson m + 1, r, rt << 1 | 1typedef long long LL;const int MAXN = 100005;LL add[MAXN << 2];LL sum[MAXN << 2];void PushUp( int rt ){ sum[rt] = sum[rt & 阅读全文
posted @ 2012-07-24 14:07 找回失去的 阅读(205) 评论(0) 推荐(0) 编辑
摘要: 题意:有n个数,从1到n,打乱顺序,现输入n-1个数,第i个数表示序列中第1到i-1的数比第i个数小的个数.要求输出该序列。从后往前每次求“第k小”,如样例,第五个数前面有0个比它小的,它一定是1,将1在线段树中删除,再看第四个数,前面有1个比它小的,它就是2、3、4、5中第2小的,以此类推。线段树求第k小一般思路:数组中存放区间元素个数,自顶向下,左边个数小于k就走右边,并用k去掉左边个数,否则走向左边,直到叶子结点就是第k小。/*Accepted 264K 47MS C++ 1061B 2012-07-24 12:19:42*/#include<cstdio>... 阅读全文
posted @ 2012-07-24 12:27 找回失去的 阅读(318) 评论(0) 推荐(0) 编辑
摘要: 求区间最大值减去最小值的值,用线段树再好不过了,这里线段树的功能就是查询区间的最大值和最小值,没有单点更新。#include<cstdio>#include<algorithm>using namespace std;#define lson l, m, rt << 1#define rson m + 1, r, rt << 1 | 1const int MAXN = 500107;int Max[MAXN << 2], Min[MAXN << 2];int N, Q;void PushUp( int rt){ Max[r 阅读全文
posted @ 2012-07-24 11:05 找回失去的 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 将字符串0到n编号,然后建图。G[i][j]是边的权值等于两个字符串的差异。然后求出最小生成树的权值。第一次写堆优化的prim算法,堆优化的好处在于避免重复更新已经存在在生成树中的点的值,在n比较大的时候效果会很明显。/*Accepted 16128K 610MS C++ 1519B 2012-07-24 10:34:28*/#include<cstdio>#include<cstring>#include<algorithm>#include<queue>#include<cstdlib>#include<iostream&g 阅读全文
posted @ 2012-07-24 10:41 找回失去的 阅读(182) 评论(0) 推荐(0) 编辑