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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

CF 375D. Tree and Queries加强版!!!【dfs序分块 大小分类讨论】

發布時間:2025/5/22 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CF 375D. Tree and Queries加强版!!!【dfs序分块 大小分类讨论】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

傳送門

題意:

一棵樹,詢問一個子樹內出現次數$\ge k$的顏色有幾種,Candy?這個沙茶自帶強制在線


?

吐槽:

本來一道可以離散的莫隊我非要強制在線用分塊做;上午就開始寫了然后發現思路錯了...;改 下午繼續寫....然后發現看大了數據范圍卡空間了...;改 然后又發現好多bug...;再改 然后發現TLE了... ;改塊的大小....可惡又卡空間了.... ;改short...可惡溢出了;改unsigned short....可惡n總共才1e5怎么練unsigned short也溢出了.....; 開O2...還不行....;然后發現之前把塊的大小和數量搞反了....;繼續改塊的大小再加上有理有據對本題特性的vector優化.....終于A了.................

?

題解:

一開始想成已經知道k預處理f不用第三維了(md那還用分塊干什么)

對出現次數$>S$和$\le S$的分開討論

預處理$f[i][j][k]$為塊i到塊j出現次數$[k,S]$的有幾種

$s[i][j]$為前i塊顏色j出現了幾次

詢問的時候

兩邊不完整的塊暴力枚舉

$>S$的部分不超過$\frac{N}{S}$種,單獨暴力枚舉(注意如果兩邊枚舉過了就不能重復枚舉了)

$[k,S]$的部分直接用預處理的f

?

?

#pragma GCC optimize ("O2") #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <cmath> #include <vector> using namespace std; typedef long long ll; const int N=1e5+5, M=245, S=425; inline int read(){char c=getchar();int x=0,f=1;while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}return x*f; }int n,Q,col,a[N],u,v,k; int cou[N], big[N], tot, mark[N];bool biiig[N]; struct edge{int v,ne;}e[N<<1]; int cnt,h[N]; inline void ins(int u,int v){e[++cnt]=(edge){v,h[u]}; h[u]=cnt;e[++cnt]=(edge){u,h[v]}; h[v]=cnt; } int dfc,L[N],R[N]; int t[N]; void dfs(int u,int fa){L[u]=++dfc; a[dfc]=t[u];for(int i=h[u];i;i=e[i].ne)if(e[i].v!=fa) dfs(e[i].v, u);R[u]=dfc; }int block,m,pos[N]; struct _blo{int l,r;}b[M]; void ini(){//block=sqrt(n); block=420;m=(n-1)/block+1;for(int i=1;i<=n;i++) pos[i]=(i-1)/block+1;for(int i=1;i<=m;i++) b[i].l=(i-1)*block+1, b[i].r=i*block;b[m].r=n; }struct Block{int f[M][M][S], c[N], s[M][N];void Set0(int x){for(int i=1;i<=col;i++) s[x][i]=s[x-1][i];for(int i=b[x].l; i<=b[x].r; i++) s[x][a[i]]++;}void Set1(int x){for(int t=x;t<=m;t++){for(int i=b[t].l; i<=b[t].r; i++) if(!biiig[ a[i] ]) c[a[i]]++;for(int i=b[t].l; i<=b[t].r; i++) if(!biiig[ a[i] ] && c[a[i]]>0){ int _=s[t-1][a[i]] - s[x-1][a[i]];f[x][t][ _+c[a[i]] ]++;f[x][t][ _ ]--;c[a[i]]=0;}for(int i=block; i>=1; i--) f[x][t][i]+=f[x][t][i+1];for(int i=1; i<=block; i++) f[x][t][i]+=f[x][t-1][i];}}int Que(int l,int r,int k){ int pl=pos[l], pr=pos[r];int ans=0;if(pl==pr){for(int i=l; i<=r; i++) c[a[i]]++;for(int i=l; i<=r; i++) if(c[a[i]]>0) ans+= c[a[i]]>=k, c[a[i]]=0;}else{for(int i=1; i<=tot; i++) mark[ big[i] ]=0;vector<int> v;int *rr=s[pr], *ll=s[pl-1];for(int i=l; i<=b[pl].r; i++){ mark[ a[i] ]=1;if(rr[a[i]] - ll[a[i]]>=k)c[a[i]]++, v.push_back(a[i]); }for(int i=b[pr].l; i<=r; i++){mark[ a[i] ]=1;if(rr[a[i]] - ll[a[i]]>=k)c[a[i]]++, v.push_back(a[i]); }for(int i=0; i<(int)v.size(); i++) if(c[v[i]]>0){int _=s[pr-1][v[i]] - s[pl][v[i]];if(biiig[ v[i] ]) ans+= _+c[v[i]]>=k;else ans+= (_<k && _+c[v[i]]>=k);c[v[i]]=0;}if(k<=block) ans+=f[pl+1][pr-1][k]; for(int i=1;i<=tot;i++) if(!mark[ big[i] ])ans+= s[pr-1][big[i]] - s[pl][big[i]] >= k;}return ans;} }B;int main(){ // freopen("in","r",stdin);n=read(); Q=read(); ini();for(int i=1;i<=n;i++) a[i]=t[i]=read(), col=max(col, a[i]), cou[a[i]]++;for(int i=1;i<n;i++) ins(read(), read());dfs(1,0);for(int i=1;i<=col;i++) if(cou[i]>block) big[++tot]=i, biiig[i]=1;for(int i=1;i<=m;i++) B.Set0(i);for(int i=1;i<=m;i++) B.Set1(i);while(Q--){u=read(); k=read();printf("%d\n", B.Que(L[u], R[u], k) );} }

?

轉載于:https://www.cnblogs.com/candy99/p/6567213.html

總結

以上是生活随笔為你收集整理的CF 375D. Tree and Queries加强版!!!【dfs序分块 大小分类讨论】的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 香蕉尹人 | 激情视频网站在线观看 | 两口子交换真实刺激高潮 | 日本大尺度电影免费观看全集中文版 | 成人在线视频免费播放 | 亚洲一区二区三区久久久 | 日韩av无码久久 | 成年精品 | 色站综合 | 精品国产aⅴ一区二区三区四川人 | 久久大陆 | 精品视频无码一区二区三区 | 国产日韩精品中文字无码 | 国产性生活一级片 | china国产乱xxxxx绿帽 | 亚洲成人第一页 | 亚洲精品国产精品国自产 | 国产一区久久 | 欧美日韩在线二区 | 天啪| 亚州av综合色区无码一区 | 国产毛片不卡 | 日韩精品一区二区三区四区 | 久久久久国色av免费观看性色 | 两根大肉大捧一进一出好爽视频 | a免费观看 | 亚洲天堂视频在线播放 | 91精品国产一区二区三竹菊影视 | 男女互插视频 | 91网站在线免费观看 | 欧美日韩在线观看成人 | 日韩精品在线观看网站 | 国产精品国产三级国产aⅴ无密码 | 国产综合视频 | 国产精品久久久久久亚洲毛片 | 日韩激情av在线 | 精品久久人人妻人人做人人 | 成人精品亚洲人成在线 | 欧美国产三级 | 成人毛片在线 | 老头巨大又粗又长xxxxx | 美日韩成人 | 久久久久久黄 | 五月天激情视频在线观看 | 亚洲天堂男人天堂 | 伊人影院在线观看视频 | free性满足hd国产精品久 | 中文字幕中文在线 | 成人黄色一级 | 污视频网站在线播放 | 日本高清视频在线观看 | 欧美日韩国语 | 久久99热久久99精品 | 伊人精品久久 | 国产女人精品 | 四虎影院成人 | 另类毛片 | 亚洲人成在线播放 | 国产日韩欧美自拍 | 性一交一乱一伧老太 | 亚洲va在线| 久久艹这里只有精品 | 欧美日韩一区二区三区在线播放 | 91亚洲国产成人精品一区二区三 | 大奶av | 欧美高清v | 国产wwwxxx| 久久久久久九九 | 欧洲精品在线播放 | 自拍偷拍亚洲区 | 日韩精品一区二区三区国语自制 | 在线看黄网站 | 国产精品二区一区二区aⅴ污介绍 | 亚洲色图 欧美 | 国产免费成人av | 日本美女一区二区 | 日韩黄色av | 自拍视频在线播放 | 探花国产精品一区二区 | 欧美日韩免费观看一区=区三区 | 国产精彩视频在线观看 | 久久久久成人精品无码 | 国产成人午夜精华液 | www在线观看国产 | 天天澡天天狠天天天做 | 中文字幕永久视频 | 日韩欧美在线播放 | 国产精品看片 | missav | 免费高清av在线看 | 欧美最猛黑人xxxx | 欧美一级大片在线观看 | 精品国产1区2区 | 永久免费汤不热视频 | 国产视频入口 | 狠狠操天天操夜夜操 | 一级片a级片 | 亚洲中文字幕一区 | 狠狠爱免费视频 | 理论片午午伦夜理片影院99 |