動態維護[l,r]區間的和
利用帶序號的並查集與字首和
這裡將i節點的到它的父親fi這一區間的和記作dis[i]
,將x的字首和記作sx
s
x有如下性質:
可以得到合併的時候:
這樣維護序號,如果兩個節點屬於同一堆,則可得到他們組成的區間的和
//
// created by rv on 2018/4/20.
//#include "cstdio"
#include "map"
using
namespace
std;
struct uf
}int get_father(int x) else
}void merge(int x, int y, int p)
void check(int x, int y, int p) else
} else
}void print()
printf("\n");
// printf("size: ");
// for (int i = 0; i < count; i++)
// printf("\n");
printf("dis: ");
for (int i = 0; i < count; i++)
printf("\n");
}};int main()
if (mp.find(l - 1) == mp.end())
uf.check(mp[r], mp[l - 1], p);
// uf.print();
}return
0;}
由於l,r太大,所以用map對映(離散化)後再用並查集處理較好,具體做法就是mp[i]=mp.size()
Photoshop製作水晶球中的美女
使用工具 photoshop cs3 注 文中所使用快捷方式,均在英文輸入法狀態下有效。效果圖 第一步 新建乙個600 800畫素的檔案,點選 圖層面板 下方的 建立新圖層按鈕 新建一層,系統自動將其命名為 圖層1 使用 橢圓選框工具 繪製乙個正圓選區,效果如 圖01 所示。第三步 在 圖層1 的縮...
並查集水題
已知n個人序號為1 n,分別屬於若干個團隊,有m條線索表明某兩個人屬於同乙個團隊,那麼這n個人一共有幾個團隊。輸入第一行為兩個數n和m,第2到m 1行為m條線索 每行兩個數a,b表示序號為a和為b的兩個人在同一隊伍中。輸出為乙個數,表示隊伍個數。示例資料 輸入 10 9 1 23 4 5 24 6 ...
並查集水題
給定一棵樹,問以其為唯一最小生成樹的完全圖的邊權和最大為多少。並查集維護大小,按 kr usca l kru scal 的方法,每次貪心連邊。見下 include using namespace std define r register define maxn 20005 define ll lo...