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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【bzoj2724】[Violet 6]蒲公英 分块+STL-vector

發布時間:2025/7/14 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【bzoj2724】[Violet 6]蒲公英 分块+STL-vector 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述

輸入

修正一下

l = (l_0 + x - 1) mod n + 1, r = (r_0 + x - 1) mod n + 1

輸出

樣例輸入

6 3
1 2 3 2 1 2
1 5
3 6
1 5

樣例輸出

1
2
1


題解

分塊+STL-vector

一個顯而易見的結論:區間眾數一定是一段連續的塊的眾數或塊外的數,證明略(逃

先把數據離散化,然后分塊預處理出f[i][j],表示從塊i到塊j的眾數位置。具體實現的話直接開個桶存一下就好了。

然后考慮詢問,整塊的直接拿出來求一下出現次數,塊外的單獨拿出來求一下出現次數,只要求$2\sqrt n+1$次。

現在只要想出怎樣求出來出現次數即可。一個簡單地方法是:對于每個數開一個vector存一下出現位置,然后在vector上二分查找出現位置。

總時間復雜度為$O(n\sqrt n\log n)$,常數有點大...

#include <cstdio> #include <cmath> #include <vector> #include <cstring> #include <algorithm> #define N 50010 #define bl(x) (x - 1) / si using namespace std; vector<int> v[N]; int a[N] , c[N] , cnt[N] , f[250][250] , ref[N]; int query(int p , int l , int r) {return upper_bound(v[p].begin() , v[p].end() , r) - lower_bound(v[p].begin() , v[p].end() , l); } int main() {int n , m , si , i , j , t , maxn , x , y , ans , last = 0;scanf("%d%d" , &n , &m) , si = (int)sqrt(n);for(i = 1 ; i <= n ; i ++ ) scanf("%d" , &a[i]) , c[i] = a[i];sort(c + 1 , c + n + 1);for(i = 1 ; i <= n ; i ++ ) t = a[i] , a[i] = lower_bound(c + 1 , c + n + 1 , a[i]) - c , v[a[i]].push_back(i) , ref[a[i]] = t;for(i = 0 ; i <= (n - 1) / si ; i ++ ){memset(cnt , 0 , sizeof(cnt)) , maxn = 0;for(j = i * si + 1 ; j <= n ; j ++ ){cnt[a[j]] ++ ;if(cnt[a[j]] > maxn || (cnt[a[j]] == maxn && a[j] < t)) maxn = cnt[a[j]] , t = a[j];if(j % si == 0) f[i][bl(j)] = t;}}while(m -- ){scanf("%d%d" , &x , &y) , x = (x + last - 1) % n + 1 , y = (y + last - 1) % n + 1 , maxn = 0;if(x > y) swap(x , y);if(bl(y) - bl(x) < 2){for(i = x ; i <= y ; i ++ )if((t = query(a[i] , x , y)) > maxn || (t == maxn && a[i] < ans))maxn = t , ans = a[i];}else{for(i = x ; i <= (bl(x) + 1) * si ; i ++ )if((t = query(a[i] , x , y)) > maxn || (t == maxn && a[i] < ans))maxn = t , ans = a[i];if((t = query(f[bl(x) + 1][bl(y) - 1] , x , y)) > maxn || (t == maxn && f[bl(x) + 1][bl(y) - 1] < ans))maxn = t , ans = f[bl(x) + 1][bl(y) - 1];for(i = bl(y) * si + 1 ; i <= y ; i ++ )if((t = query(a[i] , x , y)) > maxn || (t == maxn && a[i] < ans))maxn = t , ans = a[i];}printf("%d\n" , last = ref[ans]);}return 0; }

?

?

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

總結

以上是生活随笔為你收集整理的【bzoj2724】[Violet 6]蒲公英 分块+STL-vector的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 亚洲最大福利网站 | 国产999久久久 | 尤物视频网站在线观看 | 色噜噜日韩精品欧美一区二区 | 香蕉黄色片 | 麻豆久久久久久久久久 | 欧美一a一片一级一片 | 亚洲天堂777 | 亚洲av午夜精品一区二区三区 | 亚洲av无码国产综合专区 | 白丝美女喷水 | 精品人妻一区二区三区四区五区 | 韩国三级中文字幕hd久久精品 | 操天天 | 欧美黄色网络 | 91在线无精精品入口 | 伊人成年综合网 | 夜夜cao | 男女猛烈无遮挡免费视频 | 尤物视频在线观看国产性感 | 免费的毛片视频 | 日本黄色网络 | 国产精品一区二区av日韩在线 | 欧美性福利 | 久久国产精品二区 | 国产天堂在线观看 | 久久狠狠高潮亚洲精品 | 亚洲欧美激情在线观看 | 人妻一区二区三区视频 | 亚洲免费不卡视频 | 又黄又色 | 亚洲成人中文字幕在线 | 亚洲综合另类 | 国产福利免费视频 | 99国产精品久久久久久久久久久 | 亚洲性猛交 | 日韩在线视频在线 | 婷婷丁香色| 欧洲美熟女乱又伦 | 久久久96| 激情文学综合网 | 寡妇激情做爰呻吟 | 高潮一区二区三区乱码 | 五月婷婷天堂 | 黄瓜视频在线免费看 | 亚洲图片一区二区三区 | 色av综合网 | 女的高潮流时喷水图片大全 | 青青青在线视频观看 | 欧美字幕| 久久伊人网站 | www.九九九 | 大地资源高清播放在线观看 | 国产高清成人久久 | 海量av资源 | 浪荡奴双性跪着伺候 | 国产 日韩 欧美 综合 | 国模大尺度视频 | 国产一区二区三区高清 | 青青草网址 | 免费毛片网 | 四虎永久在线 | 亚洲激情视频小说 | 特a级黄色片 | 色综合91 | 日韩欧美国产另类 | 五月激情婷婷在线 | 色妞网站 | 欧美tv| 五月激情婷婷综合 | 操老女人视频 | 亚洲国产日韩欧美 | 国产免费成人在线视频 | 亚洲精品电影院 | 亚洲国产精品国自产拍av | 性——交——性——乱免费的 | 免费一级淫片 | 成年人av在线播放 | 欧美精品片 | 黄色小说在线免费观看 | www.色啪啪.com| 国产精品二区三区 | 亚洲最新在线 | 日本黄色aaa | 天天操狠狠操 | 青草伊人久久 | 国产富婆一级全黄大片 | 久久成年人视频 | 粉嫩av.com| 亚洲天码中字 | 96久久| 亚洲男人天堂2018 | 亚洲综合影院 | 国产亚洲精品久 | 日日射天天干 | 国产一区二区三区播放 | 最新av在线播放 | 久久人人看 | 欧产日产国产精品 |