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

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

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

      線段樹合并 [POI 2011] ROT-Tree Rotations

      波蘭人太神秘了,竟能出出來如此題目。

      題意

      給一棵樹(讀入不太尋常,這個容易處理,忽略不計), 每個葉子節點有一個權值,我們可以選擇交換一些節點的左右子樹(保證是二叉樹,且要么是葉子要么左右子樹都存在)。

      經過交換后,跑前序遍歷,求最小化的逆序對數量。

      大小不好說,大概是 1e6 左右。

      做法

      我們發現交換子樹這個操作似乎并不會影響其他的節點,因為是先序遍歷。

      所以我們僅僅需要考慮內部新增的情況,考慮遞歸統計答案。

      對于一個子樹,答案分三種:左子樹中,右子樹中,一左一右。

      前兩者在子樹中已經算過,只需要考慮第三種。

      我們需要快速計算左子樹對于右子樹能產生的逆序隊數量。

      說到逆序對,我們就會想到各種各樣的數據結構,突然想到這個東西似乎可以使用線段樹統計。

      如果有兩棵結構相同的權值線段樹中的對應節點 x, y 會給出 tr[tr[x].rc].siz*tr[tr[y].lc].siz 的貢獻。

      調轉過來同理,我們就可以使用線段樹合并進行統計。

      代碼↓

      #include <bits/stdc++.h>
      using namespace std;
      const int MN=4e6+116;
      struct Node{
      	int lc, rc, siz;
      }tr[MN];
      void pushup(int k){
      	tr[k].siz=tr[tr[k].lc].siz+tr[tr[k].rc].siz;
      }
      int tottt=0, root[MN];
      long long ans=0, u, v;
      int update(int k, int pos, int l, int r){
      	if(l==r){tr[k].siz++; return k;}
      	int mid=(l+r)>>1;
      	if(pos<=mid){
      		if(!tr[k].lc) tr[k].lc=++tottt;
      		update(tr[k].lc,pos,l,mid);
      	}else{
      		if(!tr[k].rc) tr[k].rc=++tottt;
      		update(tr[k].rc,pos,mid+1,r);
      	}
      	pushup(k); return k;
      }
      int merge(int x, int y){
      	if(!x||!y) return x+y;
      	u+=(long long)tr[tr[x].rc].siz*tr[tr[y].lc].siz;
      	v+=(long long)tr[tr[x].lc].siz*tr[tr[y].rc].siz;
      	tr[x].siz+=tr[y].siz;
      	tr[x].lc=merge(tr[x].lc,tr[y].lc);
      	tr[x].rc=merge(tr[x].rc,tr[y].rc);
      	return x;
      }
      int n, point, cnt=0;
      int Dfs(){
      	++cnt; root[cnt]=++tottt;
      	int now, pos; cin>>now;
      	if(now==0){
      		int lc, rc;
      		lc=Dfs(); rc=Dfs();
      		u=0, v=0;
      		root[cnt]=merge(lc,rc);
      		ans+=min(u,v);
      	}else{
      		update(root[cnt],now,1,n);
      	}
      	return root[cnt];
      }
      signed main(){
      	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
      	cin>>n; Dfs(); cout<<ans<<'\n';
      	return 0;
      }
      
      posted @ 2025-10-03 18:58  BaiBaiShaFeng  閱讀(3)  評論(0)    收藏  舉報
      Sakana Widget右下角定位
      主站蜘蛛池模板: 精品精品亚洲高清a毛片| 开心一区二区三区激情| 制服 丝袜 亚洲 中文 综合 | 黄冈市| 国产精品三级国产精品高| 99久久99这里只有免费费精品| 免费A级毛片樱桃视频| 亚洲另类激情专区小说婷婷久| 在线精品国产成人综合| 国产伦一区二区三区久久| 99精品国产兔费观看久久99| 亚洲国产精品久久久天堂麻豆宅男| 亚洲色偷拍区另类无码专区| 91色老久久精品偷偷蜜臀| 绥宁县| 不卡一区二区国产精品| h动态图男女啪啪27报gif| 与子乱对白在线播放单亲国产| 美日韩精品一区二区三区| 国产综合久久久久久鬼色| 婷婷综合缴情亚洲| 都匀市| 熟女系列丰满熟妇AV| 亚洲天堂av日韩精品| 国产宅男宅女精品A片在线观看| 国产蜜臀视频一区二区三区| 全免费A级毛片免费看无码| 亚洲深深色噜噜狠狠网站| 特级毛片在线大全免费播放 | av中文字幕国产精品| 亚洲av成人一区二区三区| 国产大陆av一区二区三区| 国产jlzzjlzz视频免费看| 欧美性xxxxx极品少妇| 亚洲一区二区三区激情视频 | 国产精品99久久免费| 国产精欧美一区二区三区| 亚洲18禁一区二区三区| 国产微拍一区二区三区四区| 精品夜恋影院亚洲欧洲| 77se77亚洲欧美在线|