<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      二維$MLE$線段樹

      關于二維線段樹,ta死了

      先來看看兩種二維線段樹的打法

      1.四叉樹

       

       

       然而ta死了,ta是$\Theta (n)$的,加上線段樹的常數,$T$飛穩

      2.線段樹套線段樹

      我盡量畫出來...

       

       圖中每個方塊是一棵線段樹

      畫完長這樣(你們湊合看吧,作者已經半卒了)

       

       局部放大圖

       現在每個圓點代表真正的一個點

      接下來的講解以今天的題為例(題面就不放了)

      先說區間修改

       

       假設我們現在要給圖中的$9$個綠點賦值(仔細找,相信你能找到

       

      按照一維線段樹的做法,我們會修改這六個綠點

      但這是$\Theta (NlogN)$的,會$T$

      我們可以是這對藍點進行操作

      然后我們就可以只修改圖中的四個綠點了

      代碼:

      struct Tree
      {
      	struct tree
      	{
      		int tag;
      	}t[maxn<<2];
      	void down(int k)
      	{
      		int tmp=t[k].tag;
      		t[l(k)].tag=max(t[l(k)].tag,tmp);
      		t[r(k)].tag=max(t[r(k)].tag,tmp);
      	}
      	void change(int k,int l,int r,int L,int R,int v)
      	{
      		if(L<=l&&r<=R){t[k].tag=v;return;}
      		down(k);int mid=(l+r)>>1;
      		if(L<=mid)	change(l(k),l,mid,L,R,v);
      		if(mid<R)	change(r(k),mid+1,r,L,R,v);
      	}
      }T[maxn<<2];
      void change(int k,int l,int r,int L,int R,int ll,int rr,int v)
      {
      	if(L<=l&&r<=R){T[k].change(1,1,maxn-1,ll,rr,v);return;}
      	int mid=(l+r)>>1;
      	if(L<=mid)	change(l(k),l,mid,L,R,ll,rr,v);
      	if(mid<R)	change(r(k),mid+1,r,L,R,ll,rr,v);
      }

      接下來是單點查詢

       

       我們要查圖中的綠點

       但是我們并不能只查詢這一個點,因為下圖中三個黃色的方塊里都有關于這個綠點的信息

       

       所以我們只要一邊向下走一邊查詢取$max/min$就可以了

      代碼:

      int query(int k,int l,int r,int p)
      {
      if(l==r) return t[k].tag; down(k);int mid=(l+r)>>1; if(p<=mid) return query(l(k),l,mid,p); else return query(r(k),mid+1,r,p); }
      int query(int k,int l,int r,int p1,int p2)
      {
      	if(l==r){return T[k].query(1,1,maxn-1,p2);}
      	int ans=T[k].query(1,1,maxn-1,p2),mid=(l+r)>>1;
      	if(p1<=mid)	return max(ans,query(l(k),l,mid,p1,p2));
      	else		return max(ans,query(r(k),mid+1,r,p1,p2));
      }

      以及完整代碼:

      struct Tree
      {
      	struct tree
      	{
      		int tag;
      	}t[maxn<<2];
      	void down(int k)
      	{
      		int tmp=t[k].tag;
      		t[l(k)].tag=max(t[l(k)].tag,tmp);
      		t[r(k)].tag=max(t[r(k)].tag,tmp);
      	}
      	void change(int k,int l,int r,int L,int R,int v)
      	{
      		if(L<=l&&r<=R){t[k].tag=v;return;}
      		down(k);int mid=(l+r)>>1;
      		if(L<=mid)	change(l(k),l,mid,L,R,v);
      		if(mid<R)	change(r(k),mid+1,r,L,R,v);
      	}
      	int query(int k,int l,int r,int p)
      	{
      		if(l==r)	return t[k].tag;
      		down(k);int mid=(l+r)>>1;
      		if(p<=mid)	return query(l(k),l,mid,p);
      		else		return query(r(k),mid+1,r,p);
      	}
      }T[maxn<<2];
      void change(int k,int l,int r,int L,int R,int ll,int rr,int v)
      {
      	if(L<=l&&r<=R){T[k].change(1,1,maxn-1,ll,rr,v);return;}
      	int mid=(l+r)>>1;
      	if(L<=mid)	change(l(k),l,mid,L,R,ll,rr,v);
      	if(mid<R)	change(r(k),mid+1,r,L,R,ll,rr,v);
      }
      int query(int k,int l,int r,int p1,int p2)
      {
      	if(l==r){return T[k].query(1,1,maxn-1,p2);}
      	int ans=T[k].query(1,1,maxn-1,p2),mid=(l+r)>>1;
      	if(p1<=mid)	return max(ans,query(l(k),l,mid,p1,p2));
      	else		return max(ans,query(r(k),mid+1,r,p1,p2));
      }

      關于其他操作,有空在更(基本沒空了

      posted @ 2019-11-01 20:00  hzoiooo  閱讀(277)  評論(2)    收藏  舉報
      主站蜘蛛池模板: 疯狂做受XXXX高潮国产| 另类专区一区二区三区| 激情一区二区三区成人文| 粉嫩一区二区三区国产精品| 四虎影视一区二区精品| 蜜桃av无码免费看永久| 国产a在亚洲线播放| 亚洲欧美综合人成在线| 免费看亚洲一区二区三区| 日本一区不卡高清更新二区| 久本草在线中文字幕亚洲| 99精品久久免费精品久久| 精品无人乱码一区二区三区| 美女无遮挡免费视频网站| 国产精品一亚洲av日韩| 中文字幕无码av激情不卡| 在线aⅴ亚洲中文字幕| 免费大片av手机看片高清| 香港日本三级亚洲三级| 加勒比无码av中文字幕| 色欲国产精品一区成人精品| 国产精品色哟哟在线观看| 无翼乌口工全彩无遮挡h全彩| 无码人妻一区二区三区线| 国产绿帽在线视频看| 精品久久久久中文字幕日本 | 亚洲色一区二区三区四区| 18禁免费无码无遮挡网站| 成人午夜激情在线观看| 成都市| 一 级做人爱全视频在线看| 国产极品尤物免费在线| 永修县| 都昌县| av无码精品一区二区三区| 色777狠狠狠综合| 亚洲国产成人不卡高清麻豆| 亚洲成a人片在线观看中| 国产精品人一区二区三区| 国产第一页浮力影院入口| 欧美白妞大战非洲大炮|