日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

BZOJ震波

發布時間:2024/1/18 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BZOJ震波 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

跟爍爍的游戲一模一樣

代碼

#include<bits/stdc++.h> #define LL long long using namespace std; const int _ = 1e5+1e2; const int INF = 2e9; namespace zjy_io{inline char gc(){static char buf[1<<6],*p1=buf,*p2=buf;return (p1==p2)&&(p2=(p1=buf)+fread(buf,1,1<<6,stdin),p1==p2)?EOF:*p1++;}template <class T>inline void read(T&data){data=0;register char ch=0;register int caa=1;while((ch<'0'||ch>'9')&&ch!='-')ch=gc();ch=='-'?caa=-1,ch=gc():caa=1;while(ch<='9'&&ch>='0'){data=(data<<3)+(data<<1)+(ch&15);ch=gc();}data*=caa;}inline char Getchar(){register char ch=0;while(ch<'A'||ch>'Z')ch=gc();return ch;} } int vlaue[_]; using namespace zjy_io; int mem[3000000],*pin=mem; int n,m; struct Tree_array{int size,*tree;int lowbit(register int k){return k&(-k);}void init(register int kr){tree=pin,size=kr,pin+=size+3;}void modify(register int loc,register int zh){loc=min(loc,size),++loc;for(register int i=loc;i<=size+1;i+=lowbit(i))tree[i]+=zh;}int query(register int l){l>size?l=size:l=l;register int ret=0;++l;for(register int i=l;i;i-=lowbit(i))ret+=tree[i];return ret;} }; namespace d_tree{int root,head[_],cnt,par[_]; void add(register int a,register int b){par[b]=a;}Tree_array node1[_],node2[_]; } struct orginal_tree{struct edge{int nt,to;}e[_<<1];int head[_],cnt,root,size[_],all,MX;int dfn[_],fdfn[_],vis[_],dis[_],app[_],st[_<<1][18],tot,lg[_<<1];int get_lca(register int u,register int v){u=app[u],v=app[v];if(u>v)swap(u,v);register int LEN= lg[v-u+1];return fdfn[min(st[u][LEN],st[v+1-(1<<LEN)][LEN])];}int getdist(register int u,register int v){return dis[u]+dis[v]-2*dis[get_lca(u,v)];}void add(register int a,register int b){e[++cnt].to=b,e[cnt].nt=head[a],head[a]=cnt;}void dfs(register int now,register int fa){dfn[now]=++cnt,fdfn[cnt]=now,st[++tot][0]=cnt,app[now]=tot;for(register int i=head[now];i;i=e[i].nt){if(e[i].to==fa)continue;dis[e[i].to]=dis[now]+1;dfs(e[i].to,now);st[++tot][0]=dfn[now];}}int dfsI(register int now,register int fa){int len_=0;for(register int i=head[now];i;i=e[i].nt){if(e[i].to==fa||vis[e[i].to])continue;len_=max(len_,dfsI(e[i].to,now));}return len_+1;}void getroot(register int now,register int fa){size[now]=1;register int mx=0;for(register int i=head[now];i;i=e[i].nt){if(vis[e[i].to]||e[i].to==fa)continue;getroot(e[i].to,now);size[now]+=size[e[i].to];mx=max(size[e[i].to],mx);}mx=max(mx,all-size[now]);if(MX>mx)MX=mx,root=now;}void p_divide(register int now){vis[now]=1;for(register int i=head[now];i;i=e[i].nt){if(vis[e[i].to])continue;MX=INF;all=size[e[i].to];getroot(e[i].to,now);d_tree::add(now,root);d_tree::node1[root].init(dfsI(root,0)-1);p_divide(root);}}void init(){for(register int i=1,a,b;i<n;++i)read(a),read(b),add(a,b),add(b,a);cnt=0;dfs(1,0);register int us=2*n-1;for(register int j=1;j<=17;++j)for(register int i=1;i<=us&&i+(1<<(j-1))<=us;++i)st[i][j]=min(st[i][j-1],st[i+(1<<(j-1))][j-1]);for(register int i=2;i<=us;++i)lg[i]=lg[i>>1]+1;MX=INF,all=n;getroot(1,0);d_tree::node1[root].init(dfsI(root,0)-1);d_tree::root=root;p_divide(root);} }tr; namespace d_tree{ void modify(register int a,register int b){register int dist;node1[a].modify(0,b);for(register int i=a;par[i];i=par[i]){dist = tr.getdist(a,par[i]);node1[par[i]].modify(dist,b);node2[i].modify(dist,b);}}int query(register int a,register int b){register int ret=0,dist;ret+=node1[a].query(b);for(register int i=a;par[i];i=par[i]){dist = tr.getdist(a,par[i]);if(b-dist<0)continue;ret+=node1[par[i]].query(b-dist);ret-=node2[i].query(b-dist);}return ret;}void init(){for(register int i=1;i<=n;++i) node2[i].init( node1[par[i]].size );for(register int i=1;i<=n;++i)modify(i,vlaue[i]);} } int main(){//freopen("data.in","r",stdin);//freopen("1.out","w",stdout);read(n),read(m);for(register int i=1;i<=n;++i)read(vlaue[i]);tr.init();d_tree::init();register int a,b,lastans=0;while(m--){read(a);if(a==1){read(a),read(b);a^=lastans;b^=lastans;d_tree::modify(a,b-vlaue[a]);vlaue[a]=b;}else {read(a);read(b);a^=lastans,b^=lastans;printf("%d\n",lastans=d_tree::query(a,b));}} }

總結

以上是生活随笔為你收集整理的BZOJ震波的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产美女免费无遮挡 | 亚洲精品鲁一鲁一区二区三区 | 成人午夜精品福利免费 | 精品无码国产污污污免费网站 | 国产女人在线视频 | 蜜桃av免费在线观看 | 亚洲欧美经典 | 丰满少妇中文字幕 | 粉嫩av一区二区三区四区五区 | 喷水在线观看 | 就爱啪啪网站 | 先锋影音av资源网站 | 姑娘第5集在线观看免费好剧 | 久久视奸| 5566在线| 内裤摩擦1v1h | aaaa免费视频| 欧洲一区二区在线观看 | 亚洲高清精品视频 | 色婷婷www| 91jk制服白丝超短裙大长腿 | 91亚洲国产 | 亚洲第8页| 欧美午夜精品一区二区蜜桃 | 伊人久久大 | 国产露脸国语对白在线 | 亚洲欧美bt | 亚洲成人欧美 | 日本激情网址 | 超碰在 | 免费在线看黄网址 | 国产精品爱啪在线线免费观看 | 国产在线精品视频 | 日本中文字幕第一页 | 67194成人在线观看 | 亚洲四区在线 | 久草国产在线视频 | 日韩精品视频三区 | 99热这| 男人添女人囗交视频 | 337p日本欧洲亚洲鲁鲁 | av日韩不卡 | 医生强烈淫药h调教小说视频 | 国产网红在线观看 | 欧美系列在线观看 | 动漫美女被吸乳奶动漫视频 | 韩国性经典xxxxhd | 日韩欧美亚洲一区二区三区 | 99re6在线观看| 人人舔人人 | 污网站在线免费看 | 91丨九色丨黑人外教 | 色无极亚洲影院 | 黄色av免费播放 | av一区不卡 | 丰满的女人性猛交 | 俄罗斯毛片 | 大帝av | 亚洲伦理中文字幕 | 永久免费在线观看av | 亚洲免费一区视频 | 色噜噜狠狠一区二区三区 | 亚洲精品自拍偷拍 | 美女爱爱视频 | 一级片一级片 | 色网av | 欧美bbw视频 | 亚洲精品水蜜桃 | jzzijzzij亚洲成熟少妇18 欧美www在线观看 | 日韩一级生活片 | 任你躁av一区二区三区 | 国产不卡精品视频 | 中文字幕人妻一区二区三区视频 | www.九九热| 五月天六月婷 | 一区二区三区在线观看 | 欧美极品视频在线观看 | 国产精品12页 | 久久久久久久久久久久电影 | 欧美一二区视频 | 成人免费毛片片v | 国产精品外围 | 性色av一区二区三区免费 | 日韩无套| 精品国产一二三 | 天堂欧美| 日本大片黄 | 韩国女主播一区 | 亚洲色图2 | 日本免费中文字幕 | 桥本有菜aⅴ一区二区三区 在线午夜电影 | 国产97自拍 | 亚洲一区二区三区免费 | 婷婷午夜精品久久久久久性色av | 欧美视频一二三 | 伊人影院av | 日韩视频免费看 | 奇米精品一区二区三区在线观看 | 好男人www|