摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=1698大意:给一组棍子染色,不同的颜色有不同的值,执行一系列的区间染色后,问这组棍子的总值是多少。题目分析:建树:节点的域有左右节点和颜色,l,r,num;num=0时表示这个区间由多种颜色覆盖。更新的时候,如果更新区间比当前区间小,并且当前区间的颜色大于0,说明已经被完全染色,就把该区间颜色传递到左右子树上,该区间染色为0,然后根据更新区间的大小,在左右子树上去搜索。求和的时候遇到区间的num>0的时候说明完全被染色过了,就把区间的长度乘以颜色的值加到总和里面去,然后结束这个方向的递归查询,代码:#i 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=1754View Code #include<iostream>using namespace std;struct{ int l,r,max;}s[200005*4];int data[200005];void build(int l,int r,int n){ int mid=(l+r)/2; if(l==r) { s[n].l=l; s[n].r=r; s[n].max=data[l]; } else { s... 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=1255http://acm.hdu.edu.cn/showproblem.php?pid=1542思路:嗯哼,要开始利用线段树求解矩形面积的并、交、以及周长了。先看一下吧给定一个矩形的左下角坐标和右上角坐标分别为:(x1,y1)、(x2,y2),对这样的一个矩形,我们构造两条线段,一条定位在x1,它在y坐标的区间是[y1,y2],并且给定一个cover域值为1;另一条线段定位在x2,区间一样是[y1,y2],给定它一个cover值为-1。根据这样的方法对每个矩形都构造两个线段,最后将所有的线段根据所定位的x从 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=1166用线段树做,比树状数组费时#include<iostream>using namespace std;const int N=50005;struct { int left,right,num;}s[4*N];int data[N];void build(int left,int right,int n){ int mid; mid=(left+right)/2; if(left==right) { s[n].left=left; s[n].ri... 阅读全文