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

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

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

      LOJ2570 [ZJOI2017]線段樹

      傳送門

      #include <bits/stdc++.h>
      const int N=800005,W=19;
      typedef long long ll;
      int f[N][W+1],l[N],r[N],sl[N],sr[N],ls[N],rs[N],deep[N],cnt,rt,pos[N],n,Q,u,L,R;
      ll suml[N],sumr[N];
      int build(int fa,int L,int R){
      	int k=++cnt;
      	f[k][0]=fa;
      	l[k]=L,r[k]=R;
      	if (L==R){
      		pos[L]=k;
      		return k;
      	}
      	int mid;
      	scanf("%d",&mid);
      	ls[k]=build(k,L,mid);
      	rs[k]=build(k,mid+1,R);
      	return k;
      }
      int LCA(int x,int y){
      	if (deep[x]<deep[y]) std::swap(x,y);
      	for (int i=W;i>=0;i--)
      		if (deep[f[x][i]]>=deep[y]) x=f[x][i];
      	if (x==y) return x;
      	for (int i=W;i>=0;i--)
      		if (f[x][i]!=f[y][i]) x=f[x][i],y=f[y][i];
      	return f[x][0];
      }
      void dfs(int x){
      	if (ls[x]){
      		int u=ls[x];
      		deep[u]=deep[x]+1;
      		sl[u]=sl[x]+1;
      		suml[u]=suml[x]+deep[u];
      		sr[u]=sr[x];
      		sumr[u]=sumr[x];
      		dfs(u);
      	}
      	if (rs[x]){
      		int u=rs[x];
      		deep[u]=deep[x]+1;
      		sl[u]=sl[x];
      		suml[u]=suml[x];
      		sr[u]=sr[x]+1;
      		sumr[u]=sumr[x]+deep[u];
      		dfs(u);
      	}
      }
      bool issub(int x,int y){
      	return l[y]<=l[x] && r[x]<=r[y]; 
      }
      ll call(int u,int x){
      	ll ans=suml[x]+(ll)deep[u]*sl[x];
      	int lca=LCA(u,x);
      	ll now=(ll)(sl[x]-sl[lca])*deep[lca];
      	if (issub(u,rs[lca]) && lca!=x) now++;
      	now=now+suml[lca]-sl[lca];
      	return ans-now*2;
      }
      ll calr(int u,int x){
      	ll ans=sumr[x]+(ll)deep[u]*sr[x];
      	int lca=LCA(u,x);
      	ll now=(ll)(sr[x]-sr[lca])*deep[lca];
      	if (issub(u,ls[lca]) && lca!=x) now++;
      	now=now+sumr[lca]-sr[lca];
      	return ans-now*2;
      }
      ll solve(int u,int L,int R){
      	int lca=LCA(L,R);
      	return call(u,L)-call(u,ls[lca])+calr(u,R)-calr(u,rs[lca]);
      }
      int main(){
      	scanf("%d",&n);
      	build(0,1,n);
      	pos[0]=++cnt;
      	f[cnt][0]=cnt+1;//0
      	rt=++cnt;
      	l[rt]=0,r[rt]=n+1;//0-n+1 
      	ls[rt]=pos[0],rs[rt]=cnt+1;
      	cnt++,f[cnt][0]=rt,l[cnt]=1,r[cnt]=n+1;//1-n+1
      	ls[cnt]=1,rs[cnt]=cnt+1;f[1][0]=cnt;
      	cnt++;l[cnt]=r[cnt]=n+1;pos[n+1]=cnt;
      	f[cnt][0]=cnt-1;//n+1-n+1
      	for (int i=1;i<=W;i++)
      		for (int j=1;j<=cnt;j++)
      			f[j][i]=f[f[j][i-1]][i-1];
      	dfs(rt);
      	scanf("%d",&Q);
      	while (Q--){
      		scanf("%d%d%d",&u,&L,&R);
      		L=pos[L-1],R=pos[R+1];
      		printf("%lld\n",solve(u,L,R));
      	}
      } 
      
      posted @ 2021-02-06 11:43  flyfeather  閱讀(76)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲av日韩av一区久久| 精品国产一区二区三区大| 亚洲av成人在线一区| 久久精品日日躁夜夜躁| 国内精品亚洲成av人片| 亚州中文字幕一区二区| 在线无码av一区二区三区| 亚洲一区二区av偷偷| 日韩国产亚洲欧美成人图片| 一面膜上边一面膜下边视频| 国产欧美久久一区二区| 蜜臀午夜一区二区在线播放| 精品国产欧美一区二区三区在线| 性做久久久久久久| 女同性恋一区二区三区视频| 激情五月日韩中文字幕| 最近中文字幕免费手机版| 在线精品国精品国产不卡| 猫咪网网站免费观看| 国产成人精品中文字幕| 国产特色一区二区三区视频| 中国CHINA体内裑精亚洲日本| 亚洲国产精品自产在线播放| 国产成人精品无码专区| 无码国产偷倩在线播放| 97国产成人无码精品久久久| 884aa四虎影成人精品| 国产一区二区三区自拍视频| 成人亚欧欧美激情在线观看| 亚洲第一天堂无码专区| 精品无码国产污污污免费| 亚洲欧美日韩精品色xxx| 蜜臀一区二区三区精品免费| 无码精品国产VA在线观看DVD| 毛葺葺老太做受视频| 日韩大片高清播放器| 日本在线 | 中文| 宝鸡市| 国产精品女生自拍第一区| 亚洲精品一区二区天堂| 亚洲人成网网址在线看|