很裸的一道二維線段樹,第一次做,其實二維的線段樹也就是樹套樹,先一維再第二維,第
一、二維的操作都很類似。
說回hdu這道題,有點水,提交的時候記得交c++,g++會wa死你!
#define n 210
struct node;
struct node1t[n*4];
void build_sub(int id,int rt,int ll,int rr)
int mid = (ll+rr)>>1;
build_sub(id,rt<<1,ll,mid);
build_sub(id,rt<<1|1,mid+1,rr);
}void build(int id,int l,int r,int ll,int rr)
void add_sub(int id,int rt,int act,double love)
void add(int id,int h,int act,double love)
int mid = (t[id].hl+t[id].hr)>>1;
if(h<=mid)add(id<<1,h,act,love);
else add(id<<1|1,h,act,love);
}double sear(int id,int rt,int ll,int rr)
int mid = (t[id].subt[rt].al+t[id].subt[rt].ar)>>1;
if(rr<=mid)return sear(id,rt<<1,ll,rr);
else if(ll>mid)return sear(id,rt<<1|1,ll,rr);
else return max(sear(id,rt<<1,ll,mid), sear(id,rt<<1|1,mid+1,rr));
}double query(int id,int l,int r,int ll,int rr)
int mid = (t[id].hl+t[id].hr)>>1;
if(r<=mid)return query(id<<1,l,r,ll,rr);
else if(l>mid)return query(id<<1|1,l,r,ll,rr);
else return max(query(id<<1,l,mid,ll,rr), query(id<<1|1,mid+1,r,ll,rr));
}int main() else }}
return 0;
}
hdu 1823 線段樹(非二維做法)
都說這題是二維線段樹裸題,不過我二維線段樹有點麻煩 也不太想寫 還是得學的 我就直接開200棵線段樹了 這種方法在某一維很小的時候 是完全適用的 複雜度最多 100 1000 log 1000 完全不虛 include include includeusing namespace std const...
hdu1823(二維線段樹模板題)
單點更新,求二維區間最值。二維線段樹模板題。二維線段樹實際上就是樹套樹,即每個結點都要再建一顆線段樹,維護對應的資訊。一般一維線段樹是切割某一可變區間直到滿足所要查詢區間,求最值 求和等,二維就是先切割第一維的區間,再去切割第二維的區間。includeusing namespace std defi...
HDU 4819 二維線段樹
13年長春現場賽的g題,赤裸裸的二維線段樹,單點更新,區間查詢 不過我是第一次寫二維的,一開始寫t了,原因是我沒有好好利用行段,說白一點,還是相當於枚舉行,然後對列進行線段樹,那要你寫二維線段樹幹嘛 二維就是在每個行段也建一棵樹,來代表這個區間的行裡的某些列的值 其他操作倒是不難,因為有一維的功底,...