luoguP4755 Beautiful Pair

https://www.luogu.org/problemnew/show/P4755

考慮分治,在 [l, r] 區間中用線段樹找到最大的一個點,處理經過它的可行數對的個數,統計個數可以離線樹狀數組處理

因為最多被分成 2n 個區間(像線段樹一樣),對于每個區間使用類似于啟發式合并的思想將要處理的區間放到 vector 里面,最多有 n log n 個查詢,復雜度 n log^2 n

#include <bits/stdc++.h>
#define For(i, a, b) for(int i = a; i <= b; i++)
using namespace std;typedef unsigned long long ull;
typedef long long ll;template <typename _T>
inline void read(_T &f) {f = 0; _T fu = 1; char c = getchar();while(c < '0' || c > '9') {if(c == '-') fu = -1; c = getchar();}while(c >= '0' && c <= '9') {f = (f << 3) + (f << 1) + (c & 15); c = getchar();}f *= fu;
}const int N = 1e5 + 5;int Max[N << 2], wz[N << 2], a[N], pre[N], f[N];
long long ans;
int n, len;void build(int u, int l, int r) {if(l == r) {Max[u] = a[l];wz[u] = l;return;}int mid = (l + r) >> 1;build(u << 1, l, mid);build(u << 1 | 1, mid + 1, r);if(Max[u << 1] > Max[u << 1 | 1]) Max[u] = Max[u << 1], wz[u] = wz[u << 1];else Max[u] = Max[u << 1 | 1], wz[u] = wz[u << 1 | 1];
}int Q1, Q2;void query(int u, int l, int r, int L, int R) {if(l <= L && R <= r) {if(Max[u] > Q1) {Q1 = Max[u];Q2 = wz[u];}return;}int mid = (L + R) >> 1;if(mid >= l) query(u << 1, l, r, L, mid);if(mid + 1 <= r) query(u << 1 | 1, l, r, mid + 1, R);
}int lowbit(int x) {return x & -x;}
void add(int x) {for(int i = x; i <= n; i += lowbit(i)) f[i]++;}
int query(int x) {int ans = 0; for(int i = x; i; i -= lowbit(i)) ans += f[i]; return ans;}struct ele {int l, r, v;bool operator < (const ele A) const {return v < A.v;}ele (int a, int b, int c) : l(a), r(b), v(c) {}ele () {}
};vector <ele> Q;
vector <int> t[N];void solve(int l, int r) {if(l > r) return;Q1 = 0; query(1, l, r, 1, n);int L = Q2 - l, R = r - Q2; int tmp = Q2;if(L < R) for(int i = l; i <= Q2; i++) { Q.push_back(ele(Q2, r, pre[Q1] / pre[a[i]])); }else for(int i = Q2; i <= r; i++) Q.push_back(ele(l, Q2, pre[Q1] / pre[a[i]]));solve(l, tmp - 1); solve(tmp + 1, r);
}int main() {cin >> n;for(int i = 1; i <= n; i++) { read(a[i]), pre[i] = a[i]; };sort(pre + 1, pre + n + 1); len = unique(pre + 1, pre + n + 1) - pre - 1;for(int i = 1; i <= n; i++) a[i] = lower_bound(pre + 1, pre + len + 1, a[i]) - pre;build(1, 1, n); solve(1, n);for(vector <ele> :: iterator it = Q.begin(); it != Q.end(); it++) it -> v = upper_bound(pre + 1, pre + len + 1, it -> v) - pre - 1;for(int i = 1; i <= n; i++) t[a[i]].push_back(i);sort(Q.begin(), Q.end()); int LEN = Q.size(), now = 0;for(int i = 0; i <= len; i++) {for(vector <int> :: iterator it = t[i].begin(); it != t[i].end(); it++) add(*it);while(Q[now].v == i && now < LEN) {ans += (long long)(query(Q[now].r) - query(Q[now].l - 1));now++;}}cout << ans << endl;return 0;
}

轉載于:https://www.cnblogs.com/LJC00118/p/9712365.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/282021.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/282021.shtml
英文地址,請注明出處:http://en.pswp.cn/news/282021.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何關掉macbook的開機聲音

1、系統偏好設置->聲音 2、關掉“啟動時播放聲音” 這樣設置之后&#xff0c;macbook再開機就沒有“咚”的那個聲音了

oatdata結構詳解

段名稱 文件內偏移段大小ELF頭部0x000000000x00001000oatdata0x000010000x027b8000oatexec0x027b90000x01ed69ecELF尾部0x046900000x00001000OatHeader&#xff1a; 0x00001000 | 6F 61 74 0A 30 33 39 00 77 40 00 B1 03 00 00 00 | 0x00001010 | 01 00 00 00 19 00 00 00 00…

【躍遷之路】【599天】程序員高效學習方法論探索系列(實驗階段356-2018.09.27)...

(躍遷之路)專欄 實驗說明 從2017.10.6起&#xff0c;開啟這個系列&#xff0c;目標只有一個&#xff1a;探索新的學習方法&#xff0c;實現躍遷式成長實驗期2年&#xff08;2017.10.06 - 2019.10.06&#xff09;我將以自己為實驗對象。我將開源我的學習方法&#xff0c;方法不斷…

開源 java CMS - FreeCMS2.6 Web頁面信息采集

2019獨角獸企業重金招聘Python工程師標準>>> java開源論壇系統http://javabbs.javaz.cn 項目地址&#xff1a;http://www.freeteam.cn/ Web頁面信息采集 從FreeCMS 2.1開始支持 通過簡單配置即可抓取目標網頁信息&#xff0c;支持增量式采集、關鍵字替換、定時采集&…

PropertySource和ConfigurationProperties

https://blog.csdn.net/u013725455/article/details/79352459轉載于:https://www.cnblogs.com/qunincey/p/9721364.html

ORACLE關于段的HEADER_BLOCK的一點淺析

在學習段&#xff08;segment&#xff09;、區間&#xff08;extent&#xff09;時&#xff0c;對段的HEADER_BLOCK有一些疑問&#xff0c;本文記錄一下探究的實驗過程以及相關總結&#xff0c;&#xff0c;如有不對的地方&#xff0c;敬請指出。以SCOTT.EMP表為例&#xff08;…

【源碼探索】.NET中的List,為什么即有Count屬性又有Count()方法

“優秀的程序員的標準之一是&#xff1a;編寫更易于擴展的代碼”圖片&#xff1a;奧森公園的向日葵 拍攝于2022年7月23日01—問題緣起上一篇中&#xff0c;我們知道List<T>的是基于數組實現的可變長度的列表。很多小伙伴發現&#xff0c;List<T>即有Count屬性又有C…

使用ASP.NET廣告控件的XML語言創建廣告鏈接--ASP.NET

1、AdRotator廣告控件的所有屬性都是可選的&#xff0c;XML文件中可以包含如下表所示的屬性&#xff08;XML文件的廣告屬性&#xff09;。 屬性 說明 ImageUrl 要顯示的圖像的URL NavigateUrl 單擊AdRotator控件時要轉到的網頁URL AlternateText 圖像不可用時現實的問…

vim編輯和命令模式、實踐

2019獨角獸企業重金招聘Python工程師標準>>> 9月29日任務 5.5 進入編輯模式 5.6 vim命令模式 5.7 vim實踐 Vim編輯模式 進入編輯模式 操作 說明 i 在光標所在字符前插入內容 I 在光標所在行行首插入內容 a 在光標所在字符后插入內容 A 在光標所在行行尾插入…

英語自動提取高頻詞_斑馬英語提分營免費體驗課

斑馬英語電腦版是一款專業可靠的英語學習軟件&#xff0c;斑馬英語官方版可以幫助孩子學習純正的英語口語發音&#xff0c;以講故事的形式讓孩子學習單詞及口語練習&#xff0c;斑馬英語電腦版針對兒童語言特征設計的智能口語測評系統&#xff0c;能夠自動識別發音和評分&#…

【C# Personal Handbook】開篇

博客已提更一年多了&#xff0c;這段時間里&#xff0c;發生了很多事情&#xff0c;也讓我對C#更加依戀&#xff0c;所以我決定重新更新博客&#xff0c;以自己的實踐經驗梳理C#的技術脈絡&#xff0c;也歡迎大家手下留情&#xff0c;耐心指點&#xff0c;讓我們共同進步吧&…

canvas特效代碼詳解(2)

canvas是一個就基于像素的畫圖h5元素。 利用canvas做一個如下描述所示的動態圖形&#xff1a;當鼠標點下去時開始繪圖&#xff0c;在鼠標結束時完成一個矩形&#xff0c;當再一次點擊時重復第一次的繪圖步驟。 1 <!DOCTYPE html>2 <html>3 <head>4 …

阿里云三維可視化使用初體驗

title: 阿里云三維可視化使用初體驗tags: 物聯網開發BIMcategories:物聯網本文主要的目標是使用阿里云的云產品 - 物聯網套件三維可視化 開始 準備工作 進入下載頁面下載頁面&#xff0c;點擊“模型編輯器下載”安裝模型編輯器下載安裝完畢&#xff0c;啟動模型編輯器下載&…

同時綁定onpropertychange 和 oninput 事件,實時檢測 input、textarea輸入改變事件,支持低版本IE,支持復制粘貼...

實時檢測 input、textarea輸入改變事件&#xff0c;支持低版本IE&#xff0c;支持復制粘貼 檢測input、textarea輸入改變事件有以下幾種&#xff1a; 1、onkeyup/onkeydown 捕獲用戶鍵盤輸入事件。缺陷&#xff1a;復制粘貼時無法檢測2、onchenge缺陷&#xff1a;要滿足觸發條件…

hp laser103 屬性沒有配置項_(常見解決方法)UEditor報錯“后端配置項沒有正常加載,上傳插件不能正常使用”...

&#xff08;常見解決方法&#xff09;UEditor報錯“后端配置項沒有正常加載&#xff0c;上傳插件不能正常使用”_向來蕭瑟也無畏-CSDN博客?blog.csdn.net報錯信息詳見此文的“排錯過程&&錯誤信息”→ueditor無法上傳圖片_向來蕭瑟也無畏-CSDN博客3種解決方法1.大小寫…

WinForm(十二)畫圖

在.NET中&#xff0c;畫圖主要是通過Graphics類實現的&#xff0c;這個類主要通過兩類方法完成畫圖&#xff0c;一類是DrawXXX&#xff0c;畫各種線條圖形&#xff1b;另一類是FillXXX,用各種形狀&#xff0c;填充各種圖形。Graphics是畫板&#xff0c;Draw各個方法是各種盞筆&…

從4個方面簡單介紹SaaS

你了解什么是SaaS嗎&#xff1f;SaaS有什么優勢&#xff1f;選擇SaaS平臺要注意哪些要素&#xff1f;在這里&#xff0c;怡海軟件將針對這些問題進行簡單介紹&#xff1a; 什么是SaaS&#xff1f;SaaS是Software-as-a-Service&#xff08;軟件即服務&#xff09;的簡稱&#xf…

騰訊的一筆畫游戲--巧妙解法

根據這個圖形我們可以發現圖中的規律。 所有數據的和 所有邊長的和-最后一個形狀的一個邊-除最后一個邊之外所有邊的一半。 知道了這個規律后我們就很容易去實現代碼了&#xff1a; 這里的解決關鍵點為——“余弦定理”&#xff0c;因為角度我們可以用&#xff08;n-2&#xf…

Map value類型不同的寫法

Map value類型不同的寫法 Map<String, Object> accountMapnew HashMap<String, Object>(); int userId data.get("userId").getAsInt(); int accType data.get("accType").getAsInt();String name data.get("accType").getAsStr…

mysql中局部變量說法正確的是_mysql全局變量和局部變量

全局變量和局部變量在服務器啟動時&#xff0c;會將每個全局變量初始化為其默認值(可以通過命令行或選項文件中指定的選項更改這些默認值)。然后服務器還為每個連接的客戶端維護一組會話變量&#xff0c;客戶端的會話變量在連接時使用相應全局變量的當前值初始化。舉一個例子&a…