JSOI2008 火星人 (雜湊 Splay)

2022-07-11 15:54:07 字數 963 閱讀 2428

題目

這種含有修改操作的就難以用字尾陣列實現了,求lcp這種區間相等的型別可以想到用hash判斷,同時lcp的答案大小符合二分條件可以二分求出,如果只有修改可以用線段樹維護,因為還有有插入操作所以想到平衡樹。

#includeconst

int n = 2e5 + 5

;const

intbase = 237

;typedef unsigned

long

long

ull;

ull pow[n];

struct

splayp[maxn];

inline

int identify(int

u) inline

void update(int

u)

void rotate(int

u)

void splay(int u, int

goal)

if(!goal) root =u;

update(u);

}ull hash(

int u, int

len)

int lcq(int x, int

y)

return

ans;

}int find_kth(int

k) }

void insert(int u, int

val)

void modify(int x, int

val)

}tree;

intm, x, y;

char s[n], opt[2

];int

main()

else

if(opt[0] == 'r'

)

else

}return0;

}

jsoi2008 星球大戰

題目描述 很久以前,在乙個遙遠的星系,乙個黑暗的帝國靠著它的超級 統治者整個星系。某一天,憑著乙個偶然的機遇,一支反抗軍摧毀了帝國的超級 並攻下了星系中幾乎所有的星球。這些星球通過特殊的以太隧道互相直接或間接地連線。但好景不長,很快帝國又重新造出了他的超級 憑藉這超級 的力量,帝國開始有計畫地摧毀反...

JSOI 2008 星球大戰

題目傳送門星球大戰 題目描述 很久以前,在乙個遙遠的星系,乙個黑暗的帝國靠著它的超級 統治者整個星系。某一天,憑著乙個偶然的機遇,一支反抗軍摧毀了帝國的超級 並攻下了星系中幾乎所有的星球。這些星球通過特殊的以太隧道互相直接或間接地連線。但好景不長,很快帝國又重新造出了他的超級 憑藉這超級 的力量,帝...

JSOI2008 星球大戰

題意簡述 給出n個點的無向圖,每次刪去乙個點,詢問當前的連通塊個數。刪點太難做,不如加點,首先將詢問讀取,然後離線倒著處理。標記每個已經刪去的點,首先計算出所有沒標記的點一共組成多少個連通塊。然後依次加點,同時刪去標記,首先將連通塊個數增加1,而當前點每與其他的連通塊相連,連通塊個數減少1,最終算出...