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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

3085 吃遍赴丝码(分治)

發布時間:2023/12/4 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 3085 吃遍赴丝码(分治) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

3085 吃遍赴絲碼

給定一個長度為nnn的數組,求∑i=1n∑j=in(j?i+1)×min{ai,…,aj}×max{ai,…,aj}\sum\limits_{i = 1} ^{n} \sum\limits_{j = i} ^{n} (j - i + 1) \times min\{a_i, \dots, a_j\} \times max\{a_i, \dots, a_j\}i=1n?j=in?(j?i+1)×min{ai?,,aj?}×max{ai?,,aj?}

考慮分治求解,f(l,mid),f(mid+1,r)f(l, mid), f(mid + 1, r)f(l,mid),f(mid+1,r),返回的是區間[l,mid],[mid+1,r][l, mid], [mid + 1, r][l,mid],[mid+1,r]的值,考慮兩個區間合并的時候如何計算。

我們考慮枚舉左端點i∈[l,mid]i \in [l, mid]i[l,mid]j∈[mid+1,r]j \in [mid + 1, r]j[mid+1,r],設maxn=max{ai,…amid},minn=min{ai,…,amid}maxn = max\{a_i, \dots a_{mid}\}, minn = min\{a_i, \dots, a_{mid}\}maxn=max{ai?,amid?},minn=min{ai?,,amid?}

我們在區間[mid+1,r][mid + 1, r][mid+1,r]上找到,最靠右的p1p_1p1?,滿足min{amid+1,…,ap1}≥minnmin\{a_{mid + 1}, \dots, a_{p_1}\} \ge minnmin{amid+1?,,ap1??}minn

同樣在區間[mid+1,r][mid + 1, r][mid+1,r]上找打,最靠右的p2p_2p2?,滿足max{amid+1,…,ap2}≤maxnmax\{a_{mid + 1}, \dots, a_{p_2} \} \le maxnmax{amid+1?,,ap2??}maxn

我們假設p1≤p2p_1 \le p_2p1?p2?,則我們可以把區間[mid+1,r][mid + 1, r][mid+1,r]分成三個部分[mid+1,p1],[p1+1,p2],[p2+1,r][mid + 1, p_1], [p_1 + 1, p_2], [p_2 + 1, r][mid+1,p1?],[p1?+1,p2?],[p2?+1,r]

則在第一段j∈[mid+1,p1]j \in [mid + 1, p_1]j[mid+1,p1?]上顯然有min{ai,…,aj}=minn,max{ai,…,aj}=maxnmin\{a_i, \dots, a_j\} = minn, max\{a_i, \dots, a_j\} = maxnmin{ai?,,aj?}=minn,max{ai?,,aj?}=maxn

即答案為minn×maxn×∑j=mid+1p1j?i+1minn \times maxn \times \sum\limits_{j = mid + 1} ^{p_1}j - i + 1minn×maxn×j=mid+1p1??j?i+1

?

則在第二段j∈[p1+1,p2]j \in[p_1 + 1, p_2]j[p1?+1,p2?]上顯然有max{ai,…,aj}=maxnmax\{a_i, \dots, a_j\} = maxnmax{ai?,,aj?}=maxn,區間minminmin則是[mid+1,j][mid + 1, j][mid+1,j]的最小值了,可以考慮記錄一個前綴minminmin

即答案為maxn×∑j=p1+1p2(j?i+1)×min[j]maxn \times \sum\limits_{j = p_1 + 1} ^{p_2} (j - i + 1) \times min[j]maxn×j=p1?+1p2??(j?i+1)×min[j],這個時候只要預處理出前綴∑min[j]×j,∑min[j]\sum min[j] \times j, \sum min[j]min[j]×j,min[j]即可。

如果不滿足p1≤p2p_1 \le p_2p1?p2?,我們可以同理處理∑max[j]×j,∑max[j]\sum max[j] \times j, \sum max[j]max[j]×j,max[j]即可。

則在第三段j∈[p2+1,r]j \in [p_2 + 1, r]j[p2?+1,r]上顯然有min,maxmin, maxmin,max都在[mid+r,j][mid + r, j][mid+r,j]上,所以考慮記錄一個前綴min,maxmin, maxmin,max

即答案為∑j=p2+1r(j?i+1)×min[j]×max[j]\sum\limits_{j = p_2 + 1} ^{r} (j - i + 1) \times min[j] \times max[j]j=p2?+1r?(j?i+1)×min[j]×max[j],預處理出∑min[j]×max[j]×j,∑min[j]×max[j]\sum min[j] \times max[j] \times j, \sum min[j] \times max[j]min[j]×max[j]×j,min[j]×max[j]即可。

綜上,我們可以在nlog?nn \log nnlogn的時間內得到答案。

#include <bits/stdc++.h>using namespace std;const int N = 5e5 + 10, mod = 1000000000;int a[N], lmin[N], lmax[N], rmin[N], rmax[N], n;int sum1[N], sum2[N], sum3[N], sum4[N], sum5[N], sum6[N];// min * j, min, max * j, max, min * max * j, min * maxinline int add(int x, int y) {return x + y < mod ? x + y : x + y - mod; }inline int sub(int x, int y) {return x >= y ? x - y : x - y + mod; }inline int calc(int i, int l, int r) {int fi = l - i + 1, se = r - i + 1, num = r - l + 1;return 1ll * (fi + se) * num / 2 % mod; }int f(int l, int r) {if (l == r) {return 1ll * a[l] * a[l] % mod;}int mid = l + r >> 1, ans = add(f(l, mid), f(mid + 1, r));// f(l, mid), f(mid + 1, r);// 預處理 [i, mid] 的最小最大值。lmin[mid] = lmax[mid] = a[mid];for (int i = mid - 1; i >= l; i--) {lmin[i] = min(lmin[i + 1], a[i]);lmax[i] = max(lmax[i + 1], a[i]);}// 預處理 [mid + 1, j]的最小最大值。rmin[mid + 1] = rmax[mid + 1] = a[mid + 1];for (int i = mid + 2; i <= r; i++) {rmin[i] = min(rmin[i - 1], a[i]);rmax[i] = max(rmax[i - 1], a[i]);}sum1[mid] = sum2[mid] = sum3[mid] = sum4[mid] = sum5[mid] = sum6[mid] = 0;for (int i = mid + 1; i <= r; i++) {sum1[i] = add(sum1[i - 1], 1ll * i * rmin[i] % mod);sum2[i] = add(sum2[i - 1], rmin[i]);sum3[i] = add(sum3[i - 1], 1ll * i * rmax[i] % mod);sum4[i] = add(sum4[i - 1], rmax[i]);sum5[i] = add(sum5[i - 1], 1ll * i * rmin[i] % mod * rmax[i] % mod);sum6[i] = add(sum6[i - 1], 1ll * rmin[i] * rmax[i] % mod);}int p1 = mid, p2 = mid; // min, max;for (int i = mid; i >= l; i--) {while (p1 < r && rmin[p1 + 1] >= lmin[i]) {p1++;}while (p2 < r && rmax[p2 + 1] <= lmax[i]) {p2++;}// [mid + 1, min(p1, p2)]ans = add(ans, 1ll * lmin[i] * lmax[i] % mod * calc(i, mid + 1, min(p1, p2)) % mod);// [min(p1, p2) + 1, max(p1, p2)]if (p1 < p2) {int l = p1 + 1, r = p2;ans = add(ans, 1ll * lmax[i] * sub(sum1[r], sum1[l - 1]) % mod);ans = sub(ans, 1ll * lmax[i] * (i - 1) % mod * sub(sum2[r], sum2[l - 1]) % mod);}else if (p2 < p1) {int l = p2 + 1, r = p1;ans = add(ans, 1ll * lmin[i] * sub(sum3[r], sum3[l - 1]) % mod);ans = sub(ans, 1ll * lmin[i] * (i - 1) % mod * sub(sum4[r], sum4[l - 1]) % mod);}// [max(p1, p2) + 1, r]int l = max(p1, p2) + 1;ans = add(ans, sub(sum5[r], sum5[l - 1]));ans = sub(ans, 1ll * (i - 1) * sub(sum6[r], sum6[l - 1]) % mod);}return ans; }int main() {freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);scanf("%d", &n);for (int i = 1; i <= n; i++) {scanf("%d", &a[i]);}printf("%d\n", f(1, n));return 0; }

總結

以上是生活随笔為你收集整理的3085 吃遍赴丝码(分治)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 国产精品久久久久久久久晋中 | 人体裸体bbb欣赏 | 一级做a爰片 | 午夜家庭影院 | 亚洲一区二区高清 | 天天做天天爱夜夜爽 | 久久久久亚洲av片无码下载蜜桃 | 久草国产精品视频 | 精品五月天 | 成人国产免费视频 | 中国国语农村大片 | 久久久剧场 | 欧美日韩一二三四区 | 欧美一级一区二区三区 | ww久久| 五月婷婷激情网 | 欧美巨鞭大战丰满少妇 | 337p粉嫩大胆色噜噜狠狠图片 | 91禁国产网站 | 婷婷久久综合 | 精品福利一区二区 | www.999热| 久久国产精品精品国产色婷婷 | 欧美日韩一卡二卡 | 99re在线视频免费观看 | 91大神久久 | 日本不卡一区二区 | 成人gav | 一女三黑人理论片在线 | 一色桃子juy758在线播放 | 91少妇丨porny丨 | xxxwww国产| 亚洲精品国产电影 | 日韩美女视频在线观看 | 丰满人妻一区二区三区46 | 国产视频在线观看网站 | brazzers欧美大波霸 | 欲涩漫入口免费网站 | 一级午夜| 欧美综合成人 | 正在播放木下凛凛88av | 九九一级片 | 天天干,夜夜操 | 欧美中文视频 | 稀缺呦国内精品呦 | 久久久中文网 | 成年人免费在线视频 | 晨勃顶到尿h1v1 | 在线观看黄色动漫 | 白又丰满大屁股bbbbb | 91精品视频在线看 | 农村一级毛片 | 青青草原国产在线 | 公肉吊粗大爽色翁浪妇视频 | 特黄色一级片 | 深夜福利网站在线观看 | 这里只有精品6 | 欧美日韩在线免费 | a在线免费 | 中文字幕亚洲高清 | 国产极品探花 | 久草视频免费在线 | 伊人久操 | 自拍偷拍第八页 | 公侵犯人妻一区二区 | 九色91丨porny丨丝袜 | 欧美一级大黄 | 毛片免费全部无码播放 | 台湾性生生活1 | 美女精品在线 | 这里只有精品9 | 欧美一区二区三区色 | 91av视频在线播放 | 久操视频在线 | 国产一区二区内射 | 国产又粗又猛又爽又黄91精品 | 中文字幕免费在线播放 | 黄视频免费在线观看 | 亚洲精品国产日韩 | 日韩射吧 | 精品乱码一区二区三四区视频 | 高跟鞋和丝袜猛烈xxxxxx | 国产一区二区三区高清视频 | 97在线视频免费 | 91少妇丨porny丨 | 亚洲色成人www永久网站 | 在线看片成人 | 日韩伦理中文字幕 | 久久av一区二区三区漫画 | 亚洲精品 日韩无码 | 日日干日日操 | 高清一区二区三区 | 亚洲激情图 | 久久精品国产免费 | 黑人操亚洲人 | 久热久操 | 黄色骚视频 | 操批网站 | 爱吃波客今天最新视频 |