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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【bzoj5016】[Snoi2017]一个简单的询问 莫队算法

發(fā)布時間:2025/4/9 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【bzoj5016】[Snoi2017]一个简单的询问 莫队算法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題目描述

給你一個長度為N的序列ai,1≤i≤N和q組詢問,每組詢問讀入l1,r1,l2,r2,需輸出 get(l,r,x)表示計算區(qū)間[l,r]中,數(shù)字x出現(xiàn)了多少次。

輸入

第一行,一個數(shù)字N,表示序列長度。 第二行,N個數(shù)字,表示a1~aN 第三行,一個數(shù)字Q,表示詢問個數(shù)。 第4~Q+3行,每行四個數(shù)字l1,r1,l2,r2,表示詢問。 N,Q≤50000 N1≤ai≤N 1≤l1≤r1≤N 1≤l2≤r2≤N 注意:答案有可能超過int的最大值

輸出

對于每組詢問,輸出一行一個數(shù)字,表示答案

樣例輸入

5
1 1 1 1 1
2
1 2 3 4
1 1 4 4

樣例輸出

4
1


題解

莫隊算法

(為了方便,以下使用$S_x(l,r)$代替$get(l,r,x)$)

題目一眼莫隊,不過由于一個詢問有4個參數(shù),不能直接處理。

考慮將詢問拆成前綴相減的形式,即:

$\ \ \ \ \sum\limits_xS_x(l_1,r_1)·S_x(l_2,r_2)\\=\sum\limits_{x}(S_x(1,r_1)-S_x(1,l_1-1))·(S_x(1,r_2)-S_x(1,l_2-1))\\=\sum\limits_{x}(S_x(1,r_1)·S_x(1,r_2)-S_x(1,l_1-1)·S_x(1,r_2)--S_x(1,r_1)·S_x(1,l_2-1)+S_x(1,l_1-1)·S_x(1,l_2-1))\\=Q(r_1,r_2)-Q(l_1-1,r_2)-Q(r_1,l_2-1)+Q(l_1-1,l_2-1)$

其中:

$Q(a,b)=\sum\limits_{x}S_x(1,a)·S_x(1,b)$

于是就可以把每個詢問拆成4個,使用莫隊算法分別計算對每個答案的貢獻即可。

注意當$a$或$b$中某一個為0時的情況需要過濾掉,否則會加入不存在的位置導致掛掉。

時間復雜度$O(n\sqrt{4m})$

#include <cmath> #include <cstdio> #include <algorithm> #define N 50010 using namespace std; typedef long long ll; int si , v[N] , cl[N] , cr[N] , tot; ll ans[N]; struct data {int l , r , flag , id;data() {}data(int a , int b , int c , int d) {l = min(a , b) , r = max(a , b) , flag = c , id = d;}bool operator<(const data &a)const {return (l - 1) / si == (a.l - 1) / si ? r < a.r : (l - 1) / si < (a.l - 1) / si;} }a[N << 2]; int main() {int n , m , i , x1 , y1 , x2 , y2 , lp = 0 , rp = 0;ll now = 0;scanf("%d" , &n) , si = (int)sqrt(n);for(i = 1 ; i <= n ; i ++ ) scanf("%d" , &v[i]);scanf("%d" , &m);for(i = 1 ; i <= m ; i ++ ){scanf("%d%d%d%d" , &x1 , &y1 , &x2 , &y2) , a[++tot] = data(y1 , y2 , 1 , i);if(x1 > 1) a[++tot] = data(x1 - 1 , y2 , -1 , i);if(x2 > 1) a[++tot] = data(y1 , x2 - 1 , -1 , i);if(x1 > 1 && x2 > 1) a[++tot] = data(x1 - 1 , x2 - 1 , 1 , i);}sort(a + 1 , a + tot + 1);for(i = 1 ; i <= tot ; i ++ ){while(lp < a[i].l) lp ++ , now += cr[v[lp]] , cl[v[lp]] ++ ;while(rp < a[i].r) rp ++ , now += cl[v[rp]] , cr[v[rp]] ++ ;while(lp > a[i].l) cl[v[lp]] -- , now -= cr[v[lp]] , lp -- ;while(rp > a[i].r) cr[v[rp]] -- , now -= cl[v[rp]] , rp -- ;ans[a[i].id] += a[i].flag * now;}for(i = 1 ; i <= m ; i ++ ) printf("%lld\n" , ans[i]);return 0; }

?

?

轉載于:https://www.cnblogs.com/GXZlegend/p/7597573.html

總結

以上是生活随笔為你收集整理的【bzoj5016】[Snoi2017]一个简单的询问 莫队算法的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 五月婷婷综合在线观看 | 嫩草视频91 | 欧美成人免费视频 | 日批在线视频 | 在线免费视频一区二区 | 96国产在线 | 国产一级二级视频 | 国产a级片| 日本四虎影院 | 爱爱爱免费视频 | 日韩在线第一区 | 亚洲中文字幕视频一区 | 国产一区免费在线观看 | 红桃视频网站 | 亚洲国产三区 | 日韩中文字幕在线看 | 日日噜噜夜夜狠狠久久丁香五月 | 日韩操 | 中文字幕日韩三级片 | 91毛片视频 | 中国黄色录像一级片 | 亚洲精品lv | 免费看片色 | 2019年中文字幕 | 无码人妻熟妇av又粗又大 | 日本护士体内she精2xxx | 91超碰在 | 少妇野外性xx老女人野外性xx | 日韩精品免费观看 | 另类中文字幕 | 天天综合天天色 | 国产麻豆电影在线观看 | 欧美中文字幕视频 | 一级性生活大片 | 狠狠干五月 | 亚洲精品电影 | 久久丫精品国产亚洲av不卡 | 污污内射久久一区二区欧美日韩 | 精品日本一区二区三区在线观看 | 一集毛片| 精品国产无码在线 | 欧美激情国产精品 | 强videoshd酒醉| 国产色图片 | 一区免费视频 | 久久久www成人免费无遮挡大片 | 日韩a级片 | 免费黄色在线网站 | 在线91视频 | 青青草原在线免费观看视频 | 一级特级黄色片 | 五月精品 | 在线观看的av网址 | 朴银狐电影中文在线看 | 久久在线视频 | 26uuu国产精品视频 | 国产精品女同 | www奇米影视com| 最新中文字幕 | 伊人加勒比 | 国产成人久久77777精品 | 国产色无码精品视频 | 情侣av | 国产亚洲精品成人av在线 | 蜜臀久久精品久久久久 | 曰本无码人妻丰满熟妇啪啪 | 男女做受视频 | 播放一级黄色片 | 欧美日本亚洲韩国国产 | 日韩精品一区二区三区不卡在线 | 猛男大粗猛爽h男人味 | 亚洲精品久久夜色撩人男男小说 | 欧美在线黄 | 超碰人人澡 | 女同性恋毛片 | 超碰91人人 | 亚洲欧美一区二区三区久久 | 好吊色视频在线观看 | 久久最新网址 | 人妻va精品va欧美va | 黄色91免费观看 | 日本aa大片 | 精品999久久久| 一级大毛片 | 香蕉视频一区 | 欧美多人猛交狂配 | 久草免费在线观看 | 日本在线激情 | 国产一区二区三区福利 | jizz自拍| 日本人极品人妖高潮 | 国产爱搞 | 成人午夜看片 | 精品欧美久久 | 亚洲AV无码久久精品色三人行 | 羞辱狗奴的句子有哪些 | 伊人看片 | 天天干天天爱天天操 | 日本美女黄色 |