国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

二維線段樹 洛谷P3437 [POI2006]TET-Tetris 3D

2019-11-08 03:27:54
字體:
來源:轉載
供稿:網友

https://www.luogu.org/PRoblem/show?pid=3437 代碼就不用看了,全抄hzwer的,但是我調了一個多鐘頭汗; 這個就是基本的二維線段樹了,lazy都不用的,不知道是不是傳說中的標記永久化; 二維線段樹,我選擇樹套樹,因為四分樹好像會被卡 網上只有書樹套樹的標程 二維線段樹,無論是什么操作都十分繁瑣吧; 所以我們要精簡; maketree這種東西能不搞就不弄把,只要在函數參數里多加l,r表示當前區間的范圍就好了呀; 怎么搞呢,其實和一維的線段樹差不多,基本上一樣把; 當然了,洛谷的內存是128M,這個就坑爹了; 因為最多有1000個點,線段樹最壞是滿二叉樹; 2^10=1024>1000;所以我們開1024*2=2048的就好了;

#include<iostream>#include<cstdio>using namespace std;int D,S,n,d,s,h,x,y,qs,qx,qz,qy;struct treex{ int vv[2048],tag[2048]; int outit(int l,int r,int x,int y,int num){ if(x<=l&&r<=y)return vv[num]; int ans=tag[num],mid=(l+r)>>1; if(x<=mid )ans=max(ans,outit(l,mid ,x,y,num<<1 )); if(y>=mid+1)ans=max(ans,outit(mid+1,r,x,y,num<<1|1)); return ans; } void change(int l,int r,int x,int y,int num,int val){ vv[num]=max(vv[num],val); if(x<=l&&r<=y){tag[num]=max(tag[num],val);return;} int mid=(l+r)>>1; if(x<=mid )change(l,mid ,x,y,num<<1 ,val); if(y>=mid+1)change(mid+1,r,x,y,num<<1|1,val); }};struct treey{ treex tag[2048],vv[2048]; int outit(int l,int r,int x,int y,int num){ if(x<=l&&r<=y)return vv[num].outit(1,S,qx,qs,1); int ans=tag[num].outit(1,S,qx,qs,1),mid=(l+r)>>1; if(x<=mid )ans=max(ans,outit(l,mid ,x,y,num<<1 )); if(y>=mid+1)ans=max(ans,outit(mid+1,r,x,y,num<<1|1)); return ans; } void change(int l,int r,int x,int y,int num,int val){ vv[num].change(1,S,qx,qs,1,val); if(x<=l&&r<=y){tag[num].change(1,S,qx,qs,1,val);return;} int mid=(l+r)>>1; if(x<=mid )change(l,mid ,x,y,num<<1 ,val); if(y>=mid+1)change(mid+1,r,x,y,num<<1|1,val); }}T;int main(){ scanf("%d%d%d",&D,&S,&n); while(n--){ scanf("%d%d%d%d%d",&d,&s,&h,&x,&y); qx=y+1;qz=x+1;qs=y+s;qy=x+d;// cout<<qz<<' '<<qy<<' '<<qx<<' '<<qs<<endl; int ans=T.outit(1,D,qz,qy,1); T.change(1,D,qz,qy,1,ans+h); qx=1;qs=S;// cout<<T.outit(1,D,1,D,1)<<endl; } qx=1;qs=S; printf("%d",T.outit(1,D,1,D,1));}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 盐山县| 公主岭市| 福泉市| 揭西县| 梧州市| 正蓝旗| 新晃| 嘉黎县| 虎林市| 乐亭县| 拜泉县| 梁山县| 会同县| 屯昌县| 罗平县| 雷波县| 十堰市| 汝州市| 新昌县| 石嘴山市| 台江县| 淄博市| 凌海市| 镇原县| 朝阳市| 微山县| 铅山县| 白河县| 扎鲁特旗| 开原市| 张北县| 台安县| 慈溪市| 安远县| 庆城县| 桐庐县| 敦煌市| 饶阳县| 江陵县| 遂溪县| 呈贡县|