《算法筆記》13.2小節——專題擴展->樹狀數組(BIT) 問題 D: 數列-訓練套題T10T3

數列(sequence.pas/c/cpp)

?-?問題描述

一個簡單的數列問題:給定一個長度為n的數列,求這樣的三個元素ai, aj, ak的個數,滿足ai < aj > ak,且i < j < k。

?-?輸入數據

第一行是一個整數n(n <= 50000)。

第二行n個整數ai(0 <= ai <= 32767)。

?-?輸出數據

一個數,滿足ai < aj > ak (i < j < k)的個數。

-?樣例輸入

5

1 2 3 4 1

-?樣例輸出

6

分析:思路類似問題 A,先求出一個數左邊有多少比它小,再求出一個數的右邊有多少比它小。而問題 A 中已經知道了前面怎么求,那么求右邊有多少比它大,可以把這個數組反過來存,問題就轉化為求左邊有多少比它小。

#include<algorithm>
#include <iostream>
#include  <cstdlib>
#include  <cstring>
#include   <string>
#include   <vector>
#include   <cstdio>
#include    <queue>
#include    <stack>
#include    <ctime>
#include    <cmath>
#include      <map>
#include      <set>
#define INF 0x3fffffff
#define db1(x) cout<<#x<<"="<<(x)<<endl
#define db2(x,y) cout<<#x<<"="<<(x)<<", "<<#y<<"="<<(y)<<endl
#define db3(x,y,z) cout<<#x<<"="<<(x)<<", "<<#y<<"="<<(y)<<", "<<#z<<"="<<(z)<<endl
#define db4(x,y,z,r) cout<<#x<<"="<<(x)<<", "<<#y<<"="<<(y)<<", "<<#z<<"="<<(z)<<", "<<#r<<"="<<(r)<<endl
#define db5(x,y,z,r,w) cout<<#x<<"="<<(x)<<", "<<#y<<"="<<(y)<<", "<<#z<<"="<<(z)<<", "<<#r<<"="<<(r)<<", "<<#w<<"="<<(w)<<endl
using namespace std;#define lowbit(i) ((i)&(-i))typedef struct node
{int val,pos;
}node;long long getsum(int x,int n,int c[])
{long long sum=0;for(int i=x;i>0;i-=lowbit(i))sum+=c[i];return sum;
}void update(int x,int v,int n,int c[])
{for(int i=x;i<=n;i+=lowbit(i))c[i]+=v;return;
}bool cmp(node a,node b)
{return a.val<b.val;
}int main(void)
{#ifdef testfreopen("in.txt","r",stdin);
//    freopen("out.txt","w",stdout);clock_t start=clock();#endif //testint n;while(~scanf("%d",&n)){node num[n+5];int c1[n+5]={0},c2[n+5]={0},a[n+5]={0},b[n+5]={0};for(int i=0;i<n;++i)scanf("%d",&num[i].val),num[i].pos=i;sort(num,num+n,cmp);for(int i=0;i<n;++i){if(i==0||num[i].val!=num[i-1].val)a[num[i].pos]=i+1;else a[num[i].pos]=a[num[i-1].pos];}for(int i=0;i<n;++i)b[i]=a[n-1-i];long long ans=0;long long sum1[n+5]={0},sum2[n+5]={0};for(int i=0;i<n;++i){update(a[i],1,n,c1);sum1[i]=getsum(a[i]-1,n,c1);update(b[i],1,n,c2);sum2[n-1-i]=getsum(b[i]-1,n,c2);}for(int i=0;i<n;++i)ans+=sum1[i]*sum2[i];printf("%lld\n",ans);}#ifdef testclockid_t end=clock();double endtime=(double)(end-start)/CLOCKS_PER_SEC;printf("\n\n\n\n\n");cout<<"Total time:"<<endtime<<"s"<<endl;        //s為單位cout<<"Total time:"<<endtime*1000<<"ms"<<endl;    //ms為單位#endif //testreturn 0;
}

最后記錄一下《算法筆記》書練習的 AC 代碼:codeup/13.2樹狀數組 at master · maximusyoung007/codeup · GitHub

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

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

相關文章

C# Windows Forms應用程序-001

目錄 項目概述 主要組件及功能 類定義 控件聲明 構造函數 Dispose 方法 InitializeComponents 方法 控件配置詳解 Button 控件 (button1) TextBox 控件 (textBox1) GroupBox 控件 (groupBox1) Label 控件 (label1 至 label5) OpenFileDialog 控件 (openFileDialog1…

2025.5.28總結

今日工作&#xff1a;最近進入了項目的關鍵節點&#xff0c;要求每人每天提兩單&#xff0c;今天周三&#xff0c;下班前只提了一個單。下午開了一場需求服務驗收會&#xff0c;我演示了自己驗收的那個需求&#xff0c;然后講的不是很好。當初再構造數據時請教了一個人&#xf…

Transformer核心技術解析LCPO方法:精準控制推理長度的新突破

原創文章1FFN前饋網絡與激活函數技術解析&#xff1a;Transformer模型中的關鍵模塊2Transformer掩碼技術全解析&#xff1a;分類、原理與應用場景3【大模型技術】Attention注意力機制詳解一4Transformer模型中位置編碼&#xff08;Positional Embedding&#xff09;技術全解析(…

在 WSL 中安裝 JetBrains Toolbox:完整指南

JetBrains Toolbox 是一個非常實用的工具&#xff0c;它可以幫助開發者輕松管理 JetBrains 的各種開發工具&#xff0c;如 IntelliJ IDEA、PyCharm、WebStorm 等。通過它&#xff0c;你可以快速安裝、更新和管理這些工具&#xff0c;極大地提高了開發效率。而在 WSL 環境中安裝…

ZooKeeper 命令操作

文章目錄 Zookeeper 數據模型Zookeeper 服務端常用命令Zookeeper 客戶端常用命令 Zookeeper 數據模型 ZooKeeper 是一個樹形目錄服務,其數據模型和Unix的文件系統目錄樹很類似&#xff0c;擁有一個層次化結構。這里面的每一個節點都被稱為&#xff1a; ZNode&#xff0c;每個節…

Turf.js:前端地理空間分析的瑞士軍刀

在Web開發中,地理空間數據處理已成為許多應用的核心需求。從地圖可視化到位置服務,再到復雜的數據分析,前端開發者需要強大的工具來處理這些任務。Turf.js 作為一款輕量級、模塊化的地理空間分析庫,憑借其豐富的功能和易用性,成為前端開發者的得力助手。本文將深入探討 Tu…

大模型微調

使用 Ollama 微調大語言模型&#xff08;如 LLaMA、Mistral、Gemma 等&#xff09;主要是圍繞 LoRA&#xff08;Low-Rank Adaptation&#xff09;或者 QLoRA 等輕量級微調技術進行的。Ollama 本身是一個部署和運行本地大語言模型的平臺&#xff0c;但其微調能力有限&#xff0c…

《自動駕駛軌跡規劃實戰:Lattice Planner實現避障路徑生成(附可運行Python代碼)》—— 零基礎實現基于離散優化的避障路徑規劃

《自動駕駛軌跡規劃實戰&#xff1a;Lattice Planner實現避障路徑生成&#xff08;附可運行Python代碼&#xff09;》 —— 零基礎實現基于離散優化的避障路徑規劃 一、為什么Lattice Planner成為自動駕駛的核心算法&#xff1f; 在自動駕駛的路徑規劃領域&#xff0c;Lattice…

切換到舊提交,同時保證當前修改不丟失

在 Git 中&#xff0c;可以通過以下幾種方式切換到之前的提交&#xff0c;同時保留當前的提交&#xff08;即不丟失工作進度&#xff09;&#xff1a; 1. 使用 git checkout 創建臨時分離頭指針&#xff08;推薦用于查看&#xff09; git checkout <commit-hash>這會讓…

zookeeper 操作總結

zookeeper 中的節點類型 節點類型命令選項說明?持久節點?無選項&#xff08;默認&#xff09;永久存在&#xff0c;除非手動刪除。?臨時節點?-e與客戶端會話綁定&#xff0c;會話結束自動刪除&#xff08;?不能有子節點?&#xff09;。?順序節點?-s節點名自動追加遞增…

nova14 ultra,是如何防住80°C熱水和10000KPa水壓沖擊的?

暴雨突襲&#xff0c;手忙腳亂護住背包&#xff0c;卻擔心手機被雨水浸濕&#xff1b;泳池里想記錄美好時刻&#xff0c;卻擔心手機掉入水中 &#xff1b;廚房里充滿了高溫水汽&#xff0c;近距離拍攝美食瞬間&#xff0c;手機屏幕花屏&#xff0c;讓人失去了對美食的興趣…… …

flutter加載dll 報錯問題

解決flutter加載dll 報錯問題 LoadLibrary 報錯 126 or 193 明確一點&#xff1a;flutter構建exe 時默認是MSVC的。 1. 先檢查dll 的位數是否滿足 file ***.dll output: PE32 executable (DLL) (console) x86-64, for MS Windows, 19 sections 這種是64位的機器。 滿足的話可…

Mac 版不能連接華為 GaussDB 嗎?我看 Windows 版可以連接?

&#x1f9d1;?&#x1f4bb; GaussDB 用戶 Mac 版不能連接華為 GaussDB 嗎&#xff1f;我看Windows 版可以連接。 &#x1f9d1;?&#x1f527; 官方技術中心 由于 GaussDB 數據庫本身未支持 macOS 系統&#xff0c;所以在 macOS 上的 Navicat 中也未支持該數據庫。 &…

【MySQL成神之路】MySQL索引相關介紹

1 相關理論介紹 一、索引基礎概念 二、索引類型 1. 按數據結構分類 2. 按功能分類 三、索引數據結構原理 B樹索引特點&#xff1a; 哈希索引特點&#xff1a; 四、索引使用原則 1. 創建索引原則 2. 避免索引失效情況 五、索引優化策略 六、索引維護與管理 七、特殊…

五、web安全--XSS漏洞(1)--XSS漏洞利用全過程

本文章僅供學習交流&#xff0c;如作他用所承受的法律責任一概與作者無關1、XSS漏洞利用全過程 1.1 尋找注入點&#xff1a;攻擊者首先需要找到目標網站中可能存在XSS漏洞的注入點。這些注入點通常出現在用戶輸入能夠直接輸出到頁面&#xff0c;且沒有經過適當過濾或編碼的地方…

使用 Shell 腳本實現 Spring Boot 項目自動化部署到 Docker(Ubuntu 服務器)

使用 Shell 腳本實現 Spring Boot 項目自動化部署到 Docker&#xff08;Ubuntu 服務器&#xff09; 在日常項目開發中&#xff0c;我們經常會將 Spring Boot 項目打包并部署到服務器上的 Docker 環境中。為了提升效率、減少重復操作&#xff0c;我們可以通過 Shell 腳本實現自動…

高考加油(Python+HTML)

前言 詢問DeepSeek根據自己所學到的知識來生成多個可執行的代碼&#xff0c;為高考學子加油。最開始生成的都會有點小問題&#xff0c;還是需要自己調試一遍&#xff0c;下面就是完整的代碼&#xff0c;當然了最后幾天也不會有多少人看&#xff0c;都在專心的備考。 Python勵…

HTTP協議接口三種測試方法之-JMeter(保姆教程)

在當今 API 驅動的開發世界中&#xff0c;高效、可靠的 HTTP 接口測試是保障應用質量的關鍵。作為開源性能測試工具中的王者&#xff0c;Apache JMeter 不僅擅長壓力測試&#xff0c;更是進行功能性和回歸測試的利器。本文將手把手教你如何用 JMeter 構建強大的 HTTP 測試計劃&…

聊聊JVM怎么調優?(實戰總結)

JVM 核心配置與調優指南 一、堆內存與年輕代配置&#xff08;影響最大&#xff09; 堆內存大小&#xff1a; 在資源允許的前提下&#xff0c;堆內存應盡可能設置得更大。關鍵點&#xff1a; 必須將堆內存的最大值 (-Xmx) 和最小值 (-Xms) 設置為相同值。動態擴容會觸發 Full G…

開疆智能Profinet轉Profibus網關連接費斯托閥島總線模塊配置案例

本案例是通過開疆智能Profibus轉Profinet網關將費托斯閥島接入到西門子1200PLC的配置案例。 首先我們先了解一下Profibus報文以及他的通訊原理。 除了起始符 SD 和結束符 ED 這些固定數值之外&#xff0c;還有功能碼&#xff08;Function Code, FC&#xff09;和服務訪問點&…