摘要:
线段树的成段更新,区间求和基础题。/*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 & 阅读全文
摘要:
题意:有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>... 阅读全文
摘要:
求区间最大值减去最小值的值,用线段树再好不过了,这里线段树的功能就是查询区间的最大值和最小值,没有单点更新。#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 阅读全文
摘要:
将字符串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 阅读全文