[每日隨題15] 前綴和 - 拓撲排序 - 樹狀數組

整體概述

  • 難度:1000 →\rightarrow 1500 →\rightarrow 2000

1567B. MEXor Mixup

  • 標簽:前綴和

  • 前置知識:無

  • 難度:Div.2.B 1000

題目描述:

image

輸入格式:

image

image

輸出格式:

image

樣例輸入:

5
1 1
2 1
2 0
1 10000
2 10000

樣例輸出:

3
2
3
2
3

解題思路:

  • 首先我們知道,想要讓 MEX=aMEX=aMEX=a[0,a?1][0,a-1][0,a?1] 范圍內的數都得選,發現 1≤a≤3?1051\le a\le 3·10^51a3?105 那么我們可以預處理出所有 [0,x][0,x][0,x] 的異或和。

  • 接著要讓 xor=bxor=bxor=b,我們設 xori=0a?1=cxor_{i=0}^a-1=cxori=0a??1=c,那么還差 bcb^cbc 就可以湊出該數字。

  • 需要注意的是如果 c=ac=ac=a,那么我們需要拿兩個數字湊出 ccc,否則只需要直接再增加一個 ccc 即可。

    如果 c=0c=0c=0 表示直接湊出 bbb 了,那么不需要再加數字了。

  • 預處理出前綴異或和,查詢復雜度 O(1)O(1)O(1),總復雜度 O(3?105)O(3·10^5)O(3?105)

完整代碼

#include<bits/stdc++.h>
#define Size(x) ((int)(x).size())
#define int long long
using namespace std;
const int N = 3e5+5;
int pre[N];
inline void solve(){int a,b; cin >> a >> b;int c = pre[a-1]^b;if(!c) cout << a << '\n';else if(c == a) cout << a+2 << '\n';else cout << a+1 << '\n';
}
signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int T; cin >> T;for(int i=1;i<N;i++) pre[i] = pre[i-1]^i; while(T--) solve();return 0;
}

501C. Misha and Forest

  • 標簽:拓撲排序

  • 前置知識:無

  • 難度:Div.2.C 1500

題目描述:

image

輸入格式:

image

輸出格式:

image

樣例輸入:

3
2 3
1 0
1 0
2
1 1
1 0

樣例輸出:

2
1 0
2 0
1
0 1

解題思路:

  • 由于是一片森林,不存在環,那么一定有某些節點的度為 111,而我們又知道這些節點的相鄰節點編號的異或和,就是相鄰節點的編號,那么這些邊就都可以確定了。

  • 接著在未確定的邊中刪去這些邊,就會又有某些節點度為 111,這個過程其實就是拓撲排序的過程,我們跑一遍拓撲排序,每次連邊即可。

    需要注意的是,如果出隊列的點度為 000 表明已經連過了,此時跳過即可。

  • 總復雜度 O(n)O(n)O(n)

完整代碼

#include<bits/stdc++.h>
#define Size(x) ((int)(x).size())
#define int long long
using namespace std;
const int N = (1<<16)+5;
int n,d[N],eor[N];
vector<pair<int,int>> res;
inline void solve(){cin >> n;for(int i=0;i<n;i++) cin >> d[i] >> eor[i];queue<int> qu;for(int i=0;i<n;i++) if(d[i] == 1) qu.push(i);while(!qu.empty()){int u = qu.front(); qu.pop();int v = eor[u];if(!d[u]) continue;res.push_back({u,v});eor[v] ^= u;if(--d[v] == 1) qu.push(v);}cout << res.size() << '\n';for(auto [u,v]:res) cout << u << ' ' << v << '\n';
}
signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int T; T = 1;while(T--) solve();return 0;
}

755D. PolandBall and Polygon

  • 標簽:樹狀數組

  • 前置知識:無

  • 難度:8VC Venture Cup 2017.D 2000

題目描述:

image

輸入格式:

image

輸出格式:

image

樣例輸入:

5 2
10 3

樣例輸出:

2 3 5 8 11 
2 3 4 6 9 12 16 21 26 31 

解題思路:

  • 通過畫圖我們發現,畫一條線增加的區域數畫一條線增加的區域數畫一條線增加的區域數 等同于 與原有線段的交點個數+1與原有線段的交點個數+1與原有線段的交點個數+1,所以問題就轉化為每次給出線段的兩個端點,求有多少個交點。

  • 我們發現所有相交線段的兩個端點分別位于線段兩側,即有且僅有一個端點在新線段的 (l,r)(l,r)(l,r) 間。由于每條線段兩個端點間的距離是固定的,因此我們僅需統計在 (l,r)(l,r)(l,r) 內的節點的總度數,即為交點個數。

    需要注意的是,我們用的 [l,r][l,r][l,r] 區間需要是劣弧的那一段。

  • 那么我們用樹狀數組進行單點修改,區間查詢,總復雜度 O(n?log2n)O(n·log_{2}n)O(n?log2?n)

完整代碼

#include<bits/stdc++.h>
using namespace std;
const int N = 1e6+5;
int n,k,tr[N];
inline void add(int x,int v){for(int i=x;i<=n;i+=i&-i) tr[i] += v;
}
inline long long sum(int l,int r){if(l > r) return 0;long long ans = 0;for(int i=r;i;i&=i-1) ans += tr[i];for(int i=l-1;i;i&=i-1) ans -= tr[i];return ans;
}
inline void solve(){cin >> n >> k;long long ans = 1;for(int i=1,p=1,l,r,cur;i<=n;i++){l = p,r = p = l+k > n ? l+k-n : l+k;if(l > r) swap(l,r);cur = (r-l-1) <= (n-r+l-1) ? sum(l+1,r-1) : sum(r+1,n) + sum(1,l-1); ans += cur+1;cout << ans << ' ';add(l,1), add(r,1);}
}
signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int T; T = 1;while(T--) solve();return 0;
}

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

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

相關文章

DDD領域驅動設計C++實現案例:訂單管理系統

一、DDD核心概念簡介 領域驅動設計(Domain-Driven Design)是一種軟件開發方法論&#xff0c;強調將業務領域的概念和規則融入軟件設計中。核心概念包括&#xff1a; 值對象(Value Object): 無唯一標識&#xff0c;基于屬性值判斷相等性實體(Entity): 有唯一標識&#xff0c;其生…

神經網絡和機器學習的一些基本概念

記錄一些基本概念,不涉及公式推導,因為數學不好,記了也沒啥用,但是知道一些基本術語以及其中的關系,對神經網絡訓練有很大幫助。 可能有些概念不會講得很詳細,但是當你有了這個概念,你就知道往這個方向去獲取更詳細的信息,不至于連往哪走都不知道。 下面以多元線性回歸…

MySQL(146) 如何遷移數據庫到新服務器?

數據庫遷移到新服務器是一項復雜而重要的任務&#xff0c;確保數據完整性和最小化停機時間至關重要。以下是一個詳細的步驟指導&#xff0c;包括準備工作、數據備份、數據傳輸、數據恢復和驗證的全過程。 一、準備工作 1. 確認服務器環境 源服務器&#xff1a;當前運行數據庫的…

圖論的整合

圖 有若干個節點&#xff0c;有若干條邊連接節點。&#xff08;兩個點之間不是必須相連&#xff09; 比如&#xff1a; 有向圖 可以理解為邊上面有箭頭的圖&#xff0c;比如下面這張圖&#xff1a; 在這張圖中&#xff0c;點 111 可以通過這條有向邊到達點 222&#xff0c…

電子設計大賽【C語言核心知識點】講解

目錄 前言 1. 基礎語法 2. 流程控制 3. 函數 4. 數組與字符串 5. 指針&#xff08;核心重點&#xff09; 6. 內存管理 7. 結構體與聯合體 8. 文件操作 9. 預處理器 10. 高級特性 內存布局圖解 前言 在進行程序代碼開發之前&#xff0c;需要掌握好C語言各個模塊之間…

Numpy 庫 矩陣數學運算,點積,文件讀取和保存等

目錄 1.數組&#xff08;矩陣&#xff09;的組合 2.數組&#xff08;矩陣&#xff09;的切割 3.數組的數學運算 4.數組的深拷貝和淺拷貝 5.隨機模塊 6.矩陣統計運算 7.矩陣的特有運算點積&#xff0c;求逆 8.文件讀取和保存 1.數組&#xff08;矩陣&#xff09;的組合 水…

STL學習(?函數對象,謂詞,內建函數對象)

目錄 一、函數對象 1.函數對象的概念 2.函數對象的使用 &#xff08;1&#xff09;函數對象在使用的時候&#xff0c;可以像普通函數那樣調用&#xff0c;可以有參數&#xff0c;也可以有返回值。 &#xff08;2&#xff09;函數對象超出普通函數的概念&#xff0c;函數對象…

【爬蟲】05 - 爬蟲攻防

爬蟲05 - 爬蟲攻防 文章目錄爬蟲05 - 爬蟲攻防一&#xff1a;隨機User-Agent爬蟲1&#xff1a;fake-useragent2&#xff1a;高級反反爬策略3&#xff1a;生產環境建議二&#xff1a;代理IP爬蟲1&#xff1a;獲取代理IP2&#xff1a;高階攻防3&#xff1a;企業級的代理實戰三&am…

FPGA自學——存儲器模型

FPGA自學——存儲器模型 文章目錄FPGA自學——存儲器模型一、IP核二、ROM&#xff08;read only memory&#xff09;三、ROM的IP核調用四、RAM&#xff08;random access memory&#xff09;五、RAM的IP核調用總結1.不同波形的使用的存儲器2.塊與分布式的選擇3.FPGA與模塊的容量…

【C++】stack和queue拓展學習

目錄 1.反向迭代器思路及實現 1.1. 源碼及框架分析 1.2. 實現反向迭代器 2.stack和queue練習拓展-計算器實現 2.1. 后綴表達式概念 2.2. 后綴表達式運算規則 2.3. 中綴表達式轉后綴表達式 2.3.1 轉換思路 2.3.2 代碼實現 2.4. 計算器實現 1.反向迭代器思路及實現 1.1…

Web3與區塊鏈如何革新網絡安全——走在前沿

隨著互聯網技術的飛速發展&#xff0c;網絡安全問題日益成為全球關注的焦點。Web3和區塊鏈技術作為新興的技術力量&#xff0c;正在逐步改變網絡安全的格局。本文將探討Web3和區塊鏈技術如何革新網絡安全&#xff0c;走在技術前沿。 1. Web3技術概述 Web3&#xff0c;即第三代互…

網絡初級安全第三次作業

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>用戶登錄</title><style>* {margin:…

CSS中用display實現元素的顯示/隱藏切換

** 通過display中的none和block ** 在前端開發中&#xff0c;display: none 和 display: block 是兩種常用的 CSS 顯示模式&#xff0c;核心區別在于&#xff1a;是否在頁面中保留元素的占位空間 1. 核心區別屬性display: nonedisplay: block占位空間元素完全從渲染樹中移除&am…

因果圖方法設計測試用例的價值與使用范圍

一、因果圖方法的核心原理 因果圖方法通過分析軟件規格說明中的輸入條件&#xff08;因&#xff09;和輸出結果&#xff08;果&#xff09;之間的邏輯關系&#xff0c;利用圖形化方式將這些關系清晰展現。它使用特定的符號表示因果關系&#xff08;如恒等、非、或、與&#xff…

智慧農服數字化平臺-數字科技賦能農業,開啟智慧三農新篇章

智慧農服數字化平臺數字科技賦能農業&#xff0c;開啟智慧三農新篇章平臺概覽在鄉村振興和農業現代化的時代背景下&#xff0c;我們推出了創新的農業服務數字化平臺——一個專為農業生產者打造的綜合性SaaS服務平臺。平臺以"科技助農、數據興農"為使命&#xff0c;通…

在線教育培訓課程視頻如何防下載、防盜錄?

在數字化學習日益普及的今天&#xff0c;高質量的在線課程已成為教育機構、知識付費平臺和講師的核心競爭力。如何在不影響學員正常學習體驗的前提下&#xff0c;有效防止課程視頻被惡意盜取&#xff1f;今天介紹在線教育課程防下載、防盜錄的10種視頻加密方法&#xff0c;看看…

圖像分析學習筆記(2):圖像處理基礎

圖像分析學習筆記&#xff1a;圖像處理基礎圖像增強方法圖像復原方法圖像分割方法形態學處理圖像增強方法 目的&#xff1a;改善視覺效果&#xff0c;例如增強對比度定義&#xff1a;為了改善視覺效果、便于人或計算機對圖像的分析理解&#xff0c;針對圖像的特點或存在的問題…

生存分析機器學習問題

研究目標&#xff1a; 開發一個機器學習模型&#xff0c;用于個性化預測XXX的總體生存期。 模型輸入&#xff1a;結合生存時間、治療方案、人口統計學特征和實驗室測試結果等多種特征。 模型輸出&#xff1a;預測二元結果&#xff08;活著 vs. 死亡&#xff09;。 應用場景&…

【華為機試】547. 省份數量

文章目錄547. 省份數量描述示例 1示例 2提示解題思路核心分析問題轉化算法選擇策略1. 深度優先搜索 (DFS)2. 廣度優先搜索 (BFS)3. 并查集 (Union-Find)算法實現詳解方法一&#xff1a;深度優先搜索 (DFS)方法二&#xff1a;廣度優先搜索 (BFS)方法三&#xff1a;并查集 (Union…

09_Spring Boot 整合 Freemarker 模板引擎的坑

09_Spring Boot 整合 Freemarker 模板引擎的坑 1.背景&#xff1a; springboot 版本&#xff1a;3.0.2 2. 引入依賴 在 pom.xml 中添加&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web<…