題解:P13754 【MX-X17-T3】Distraction_逆序對_前綴和_Ad-hoc_算法競賽C++

Beginning

這道題思維難度很大,有兩個難點其實都不好解決,但因為其代碼太過弱智所以只是綠題。

本題解詳細地分析了做題時的歷程與思路,所以希望大家可以仔細地完整閱讀。

Analysis

首先先大體觀察一下題目的性質:nnn 是排列,這可能會有用;題目的權值求法其實就是逆序對,而逆序對產生的貢獻一定有偶數個,所以我們的答案一定是偶數。

同時,對二取模也十分引人注意。這意味著我們的 vvv 序列其實是一個 010101 序列。

題目要求可以選擇執行一次移動操作使得權值和變大,也就是我們要通過這一次操作嘗試變出更多的 111。嘗試一下發現,每次移動一個數只會對其移動中跨過的數產生影響,如果是 010101 序列的話就體現在會把 010101 翻轉。對于移動的數字,如果跨過了奇數個位置則翻轉,否則不變。

可以簡單理解一下:

  1. 如果一個數 xxx 從位置 aaa 移動到位置 bbbb+1b+1b+1 之間(滿足 a<ba<ba<b),那么對于 [a+1,b][a+1,b][a+1,b] 中的任意一個數字 ttt,如果 xxx 在移動前對 ttt 產生了貢獻,則 x>tx>tx>t,移動后 xxx 將不再對 ttt 產生貢獻,在模二的意義下就相當于 ttt 異或上 111,即 010101 翻轉。反之亦然。
  2. 對于 xxx 同理,其移動后原來產生貢獻的數字一定不產生貢獻,原來不產生貢獻的數字一定會產生新貢獻。看貢獻變化量的奇偶性,如果跨過偶數個那么貢獻變化量一定是偶數(偶數 - 偶數 = 偶數),在模二意義下貢獻值不變。反之亦然。

我們好像得到了一個初步的簡化題面:給定一個 010101 序列,可以翻轉某一個區間,使得最終序列中 111 個數最多。

顯然,我們要求一個類似最大子段和的東西,然后用初始貢獻加上一次翻轉能帶來的最大貢獻就是答案。

同時我們還發現翻轉區間的長度只能是偶數,因為上述 xxx 跨過奇數個位置的情況下 xxx 自己也會變,其實就等價于翻轉了 [a,b][a,b][a,b] 這個長度為偶數的區間。

所以我們要找到一個長度為偶數的區間使得區間內 000 的個數減去 111 的個數得到的差最大。

考慮把 000 映射成 111,把 111 映射成 ?1-1?1,然后統計前綴和。對于每個位置,可以記錄下之前奇數位置與偶數位置上的最小前綴和,根據下標奇偶性轉移最大差值即可。

時間復雜度 O(n)O(n)O(n)


這還沒完,轉換完題意后我們還要考慮如何計算初始貢獻。這道題時限卡樹狀數組的 log?\loglog(實測光放一個 sort 交上去就會 TLE),所以我們還要考慮如何線性求初始貢獻。

肯定要從對二取模這個性質下手。發現我們最開始得到的逆序對貢獻數一定是偶數這個結論其實很對,假設對于 pip_ipi?,因為是排列所以比 pip_ipi? 小的數就有 pi?1p_i-1pi??1 個。設 tit_iti? 表示 iii 左邊比 pip_ipi? 小的數的個數,根據題目貢獻可以寫成 [(i?1)?ti]+[(pi?1)?ti]=i+pi?(2ti+2)[(i-1)-t_i]+[(p_i-1)-t_i] = i+p_i - (2t_i+2)[(i?1)?ti?]+[(pi??1)?ti?]=i+pi??(2ti?+2),后半部分明顯被取模二約掉了!所以最終的初始貢獻表達式即為 vi=(i+pi)?mod?2v_i=(i+p_i) \bmod 2vi?=(i+pi?)mod2

根據上述方法預處理即可,時間復雜度 O(n)O(n)O(n)

Code

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 5e6 + 7;int n, a[maxn], s[maxn];void solve()
{int ans = 0;cin >> n;for(int i = 1; i <= n; i ++){cin >> a[i];a[i] = (i + a[i]) % 2; // 計算初始值ans += (a[i] == 1); // 統計答案s[i] = s[i - 1] + (a[i] == 0? 1 : -1); // 轉化+預處理前綴和}int min1 = 1e9, min2 = 0; // 奇數、偶數位置的最小前綴和int maxd = 0; // 最大貢獻for(int i = 1; i <= n; i ++){if(i % 2 == 0){maxd = max(maxd, s[i] - (i==2? 0:min2)); // 特判一下之前還沒有前綴和的時候可以認為能全選(歷史前綴和=0)min2 = min(min2, s[i]);}else{maxd = max(maxd, s[i] - (i==1? 0:min1));min1 = min(min1, s[i]);}}cout << ans + maxd << '\n';
}signed main()
{ios :: sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);int T; cin >> T;while(T --) solve();return 0;
}

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

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

相關文章

Android Studio下載gradle文件很慢的捷徑之路

小伙伴們是不是也經常遇到導入新的項目時&#xff0c;AS一直卡在gradle的下載中。下面介紹一種簡單暴力的方式來處理這個問題。 首先我們到gradle的官網下載自己想要的gradle版本。我這里以gradle7.5為例。點擊下載gradle-7.5-bin.zip的壓縮包。下載完成后無需解壓。直接到C:\U…

【C++】全局變量/靜態變量的初始化時機

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄一、全局變量下斷點調試1. int a 10; —— 不能卡住斷點2. static int b; —— 不能卡住斷點3. MyClass c; —— 可以卡住斷點4. static MyClass d; —— 可以卡住斷…

水體反光 + 遮擋難題破解!陌訊多模態融合算法在智慧水務的實測優化

一、智慧水務行業檢測痛點&#xff08;數據支撐 場景難點&#xff09; 根據《2023 年中國智慧水務發展報告》&#xff0c;當前水務監控系統在核心業務場景中面臨兩大效率瓶頸&#xff0c;直接影響水廠運維與供水安全&#xff1a; 高誤報率導致運維資源浪費&#xff1a;水廠沉…

C++的指針和引用:

目錄 引用&#xff1a; 注意&#xff1a; 左值引用和右值引用&#xff1a; 左值引用&#xff1a; 右值引用&#xff1a; 指針&#xff1a; 指針與引用的區別&#xff1a; 引用&#xff1a; 在C中&#xff0c;?引用?是一種為已存在變量創建別名的機制&#xff0c;它允…

圖像處理中的偽影

目錄 一、塊效應偽影 / 塊狀偽影 二、 去除塊狀偽影 三、振鈴偽影 一、塊效應偽影 / 塊狀偽影 塊狀偽影(Blocking Artefacts)是對經過變換編碼的圖像進行重建時&#xff0c;圖像中可能會出現壓縮過程產生的可見偽影。基于塊的變換編碼中&#xff0c;一種常見偽影是 “塊效應…

Java:對象的淺拷貝與深拷貝

目錄 一、概念 二、實現方式 2.1 淺拷貝&#xff08;不推薦&#xff09; 2.2 深拷貝 2.2.1 方法一&#xff1a;重寫 clone() 方法并遞歸克隆&#xff08;常用&#xff09; 2.2.2 方法二&#xff1a;通過序列化實現&#xff08;更強大&#xff0c;但更重&#xff09; 2.2…

佰鈞成 社招 一面

1. “評估需求、排期”的工作流程&#xff1f; “我的工作流程一般是這樣的&#xff1a; 需求評審&#xff1a; 首先會和產品、后端同學一起過需求&#xff0c;確保我完全理解了業務背景和要實現的價值&#xff0c;而不僅僅是功能點。技術方案設計&#xff1a; 之后&#xff0c…

最短路徑問題(圖論)

1 Floyd 作用&#xff1a; 求圖中所有頂點之間的最短路徑&#xff0c;包括有向圖或者無向圖&#xff0c;權重正負皆可&#xff0c;用來一次性求所有點之間的最短路徑。 思路是 通過逐步擴大中間層&#xff0c;使得最短路徑不斷被更新&#xff0c;直到中間層擴大到n位置&#…

2025年8月新算法—云漂移優化算法(Cloud Drift Optimization Algorithm, CDO)

1、簡介 這項研究介紹了云漂移優化&#xff08;數位長&#xff09;算法&#xff0c;這是一種創新的自然啟發的元啟發式方法來解決復雜的優化問題。CDO模仿受大氣力影響的云粒子的動態行為&#xff0c;在探索和利用之間取得了微妙的平衡。它具有自適應權重調整機制&#xff0c;可…

VS Code進行.NET開發時使用斷點和熱重載

VS Code 調試熱重載 1. VS Code 設置 安裝擴展&#xff1a;C#、C# Dev Kit設置中搜索hot reload&#xff0c;選擇C#開發工具包&#xff0c;把下圖的幾項全部打勾2. 啟動項目&#xff08;僅用左側“運行和調試”&#xff09; 打開解決方案&#xff0c;選你的啟動項目的“.NET La…

mysqlbinlog解析命令

解析 MySQL Binlog 詳細信息的命令以下是解析 MySQL Binlog 詳細信息的常用命令&#xff1a;1. 基本 binlog 解析命令# 查看 binlog 文件內容&#xff08;基本格式&#xff09; mysqlbinlog /var/lib/mysql/mysql-bin.000001# 查看特定時間段的 binlog mysqlbinlog --start-dat…

算法訓練營day60 圖論⑩ Bellman_ford 隊列優化算法、判斷負權回路、單源有限最短路(修改后版本)

增加對最短路徑的優化算法、負權回路、單源有限最短的講解 Bellman_ford 隊列優化算法 -------------------------------------------------------------------------------- 8.24更新&#xff1a;該算法是針對帶負值的最短路徑的優化算法&#xff0c;核心通過隊列來實現&…

Python 學習(十六) 下一代 Python 包管理工具:UV

目錄1. UV 介紹1.1 什么是UV&#xff1f;1.2 UV的核心優勢1.3 UV和其他工具對比1&#xff09;UV vs. pipvirtualenv2&#xff09;UV vs. Conda3&#xff09;UV vs. Poetry4&#xff09;功能對比表2. UV的安裝與常用命令2.1 安裝UV1&#xff09;使用官方安裝腳本&#xff08;推薦…

Redis學習筆記 ----- 緩存

一、什么是緩存 緩存&#xff08;Cache&#xff09;是數據交換的緩沖區&#xff0c;是存儲數據的臨時地方&#xff0c;一般讀寫性能較高。 &#xff08;一&#xff09;緩存的作用 降低后端負載&#xff1a;減少對數據庫等后端存儲的直接訪問壓力。提高讀寫效率&#xff0c;降低…

React響應式鏈路

文章目錄響應式鏈路的核心環節1.狀態定義與初始化2.狀態更新觸發&#xff08;狀態變更&#xff09;3.調度更新&#xff08;Scheduler&#xff09;4.重新渲染&#xff08;Render 階段&#xff09;5.協調&#xff08;Reconciliation&#xff09;與 Fiber 架構6.提交更新&#xff…

軟件設計師——計算機網絡學習筆記

一、計算機網絡 網絡基礎 1. 計算機網絡的分類2. 網絡拓撲結構 總線型(利用率低、干擾大、價格低) 星型(交換機形成的局域網、中央單元負荷大) 環型(流動方向固定、效率低擴充難) 樹型(總線型的擴充、分級結構) 分布式(任意節點連接、管理難成本高)一般來說&#xff0c;辦公室局…

1200 SCL學習筆記

一. IF. 如果。下面是一個起保停IF #I_start AND NOT #I_stop THEN //如果I_start接通 和 I_stop沒有接通#Q_run : 1; //輸出Q_run 接通 ELSIF #I_stop THEN //如果I_stop接通#Q_run : 0; //。。。。。。 END_IF;二. CASECASE…

單例模式與線程池

1. 單例模式單例模式是一種常用的設計模式&#xff0c;它確保一個類只有一個實例&#xff0c;并提供一個全局訪問點來獲取這個實例。這種模式在需要控制資源訪問、管理共享狀態或協調系統行為時非常有用。單例模式的核心特點&#xff1a;私有構造函數&#xff1a;防止外部通過n…

Chrome和Edge如何開啟暗黑模式

Edge和Chrome瀏覽器都提供了實驗性功能&#xff0c;可以通過修改實驗性設置來開啟暗黑模式。 在瀏覽器地址欄中輸入edge://flags/&#xff08;Edge&#xff09;或chrome://flags/&#xff08;Chrome&#xff09;。在搜索框中輸入“dark”&#xff0c;找到與暗黑模式相關的選項。…

【科研繪圖系列】浮游植物的溶解性有機碳與初級生產力的關系

禁止商業或二改轉載,僅供自學使用,侵權必究,如需截取部分內容請后臺聯系作者! 文章目錄 介紹 數據準備 數據處理 溶解性有機碳(DOC)與初級生產力(NPP)的關系 溶解性有機碳(DOC)與光照強度(PAR)的關系 數據可視化 加載R包 數據下載 導入數據 畫圖1 畫圖2 總結 系統信…