原创 2017 暑假艾教集訓 day11 線段樹!

BZOJ 2212 做法:線段樹的合併,從下往上進行合併,順便判斷兄弟節點是否交換,如果不交換逆序對爲左子樹的+右子樹的+左子樹大於mid * 右子樹小於mid。如果交換加的就是左子樹小於mid*右子樹大於mid的。 合併操作很神奇,還有

原创 2017 暑假艾教集訓 day8 (補一道思維題,

HDU 2615 做法:好好讀題!!!。當時晚上做的,完全不知道在寫什麼。 首先第一刀切任何地方都有可能, 所以先暴力枚舉第一刀。 而第二刀就不同了,這裏第二個人是有智慧的,會切一刀使他得到的最大,只需要在第一重循環下開一個maxtw

原创 2017 暑假艾教集訓 day6

CF 240F 做法:二維線段樹,分別記錄一個區間的小寫字母個數,每次從小到大給兩邊分配(字典序最小)(區間更改)! #include <bits/stdc++.h> #define lson rt<<1,begin,mid #de

原创 2017 暑假艾教集訓 day7 (樹鏈剖分模板)

HDU 3966 樹鏈剖分模板題#include <bits/stdc++.h> using namespace std; const int maxn= 50010; int n,m,q; int c[maxn]; int head[

原创 2017 暑假艾教集訓 day8 (樹鏈剖分+樹上點分治)

POJ 2763 樹鏈剖分 邊權化點權問題(只需要把邊的權值給深度大的節點轉換爲點權值問題即可) #include <iostream> #include <cstring> #include <cstdio> #include <cm

原创 複習艾教

Day 1  亂搞 Day 2  狀壓DP + 狀壓 BFS Day 3  線性DP + 區間DP Day 4  素數篩 + 最大公約數 + 分解質因數 + 同餘運算 + 快速冪 + 中國剩餘定理 + 費馬小定理 + 積性函數      

原创 CF1005E

題意n個數字,問m是多少個區間的中位數?偶數個數字的區間中位數認爲是中間靠左的那個數字,比如(1,3,7,8)中位數爲3。E1:這n個數字是1~n的一個排列E2:n個數字,數字大小不超過2e5題解做法①(可過E1,過不了E2):思路請

原创 組合數學

#define mod 998244353 #define ll long long using namespace std; ll fac[maxn],inv[maxn],dp[maxn];int a[maxn]; void Init

原创 關於lower_bound( )和upper_bound( )的常見用法

lower_bound( )和upper_bound( )都是利用二分查找的方法在一個排好序的數組中進行查找的。在從小到大的排序數組中,lower_bound( begin,end,num):從數組的begin位置到end-1位置二分