摘要: 链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166代码View Code 1 #include <stdio.h> 2 #include <string.h> 3 #define maxn 50000*4+5 4 struct node { 5 int l,r,val; 6 }tr[maxn]; 7 void pushup(int rt) 8 { 9 tr[rt].val = tr[rt*2].val+tr[rt*2+1].val;10 return;11 }12 void build(int l,int r,int r. 阅读全文
posted @ 2012-08-10 21:53 某某。 阅读(151) 评论(0) 推荐(0) 编辑
摘要: 链接:http://acm.hdu.edu.cn/showproblem.php?pid=4217题意:就是让你输入一个N代表有1`n几个数,然后输入Q代表几次询问,每次询问输入一个K ,代表吧第K大的数删除。最后计算删除的数的大小~代码#include <stdio.h>#include <string.h>#define maxn 262145*4+5//一般开到最大的四倍大小就无压力~__int64 count,sub;struct node{ __int64 sum,count;}tr[maxn];void pushup(__int64 rt){ tr[rt]. 阅读全文
posted @ 2012-08-10 21:07 某某。 阅读(269) 评论(0) 推荐(0) 编辑
摘要: 作者:Dong|可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址:http://dongxicheng.org/structure/segment-tree/1、概述线段树,也叫区间树,是一个完全二叉树,它在各个节点保存一条线段(即“子数组”),因而常用于解决数列维护问题,它基本能保证每个操作的复杂度为O(lgN)。2、线段树基本操作线段树的基本操作主要包括构造线段树,区间查询和区间修改。(1) 线段树构造首先介绍构造线段树的方法:让根节点表示区间[0,N-1],即所有N个数所组成的一个区间,然后,把区间分成两半,分别由左右子树表示。不难证明,这样的线段树的节点数只有2N 阅读全文
posted @ 2012-08-10 20:06 某某。 阅读(1236) 评论(0) 推荐(0) 编辑