原创 ZOJ-3953-Intervals 貪心

題目大意: A:三個區間兩兩重合 給你n個區間,讓你從中刪除幾個區間,使得A不成立 題目思路:貪心。首先將區間以 左值從小到大排序 然後遍歷三個區間,記x爲p[0],y爲p[1],從p[2]開始遍歷 1. 首先判斷這三個區間是否兩兩相交

原创 hdu5919 主席樹求區間不同數

題目大意:有長度爲n的序列,強制在線詢問[l,r] 這段區間中所有不同數出現的第一個位置,按照位置從小到大排完序以後的中間(向上取整)的那個位置是多少? 解題思路:把n個元素倒着插進主席樹中,把上次出現的同一個值的元素的貢獻值-1

原创 hdu 5790 prefix 主席樹在線維護區間不同數的個數

題意:給n個串,m次詢問,每次給你L,R 要統計第L~R個串中有多少個不同的前綴。n<=10w m<=10w 串的總長度<=10w 題解:由於是前綴,可以用trie樹處理,剩下的問題就是在線訪問區間內有多少個不同的數了。 我們可以記錄tr

原创 hdu5781 ATM Mechine 概率dp

題意:  有不超過k元錢,若取錢大於剩餘,atm會報錯,問在不超過w次報錯下,取出所有錢的最小期望。 題解:  設當前狀態dp[i][j],i爲最大錢數,j爲剩餘報錯數,  若i > 0、 j > 0,  則dp[i][j] = mi

原创 hdu1542 掃描線+線段樹

給n個矩形(邊平行於座標軸) 求圍起來的面積 裸的掃描線+線段樹#include <cstdio> #include <cmath> #include <algorithm> #include <vector> #include <map

原创 hdu5809 Ants KD-tree+並查集

初次接觸kd樹,其實kd樹就是將空間上的點分塊,然後暴力查找,查找的時候用估價函數判斷最值。主要還是靠模板。 題意:二維平面上有n(10W)個點,螞蟻一開始只會出現在某個點上,然後向着直線距離最近的點走。有10W個詢問,每次詢問兩個點,詢

原创 hdu5726 GCD ST表+離線

給定一個序列,每次詢問一個區間  輸出這個區間上所有數的GCD,以及GCD與其相同的區間個數(整個序列) 一個連續區間的GCD,用倍增法預處理一下,

原创 hdu5845 Best Division (xor-trie+dp)

題意:給定一段數列,將其劃分成最多的段 並且每段長度不超過 L且異或和不超過 X 有一個很顯然的 O(N2)的dp做法 dp[i]表示到 i爲止最多能分成多少段  然後從前面最多 L個 dp值轉移出來  但是對前面 L個 dp可以

原创 codeforces710F AC自動機

題意:維護一個字符串集合,支持插入一個串,刪除一個串,詢問集合中的串在給出的串中出現多少次,一個串出現多次算多次。並且不會有兩次插入的串相同。強制在線。 考慮沒有刪除的情況,將插入串的個數二進制拆分,對於每2k 個串維護一個ac自動機

原创 HDU5955 Guessing the Dice Roll AC自動機+高斯消元

10個人圍在一起丟色子,每個人給一個長度爲l的序列,色子可以丟無限次,誰的序列先出現誰就勝利,遊戲結束。 先說個暴力Y解,先建立AC自動機,然後很容易想到dp[I][J] 第i步走到狀態j的概率,然後很明顯次數可以用矩陣優化,然而我的姿勢

原创 poj 2449 K 短路(不嚴格)

#include <stdio.h> #include <string.h> #include <queue> #define M 100010 #define N 1005 const int inf = 0x3f3f3f3f; usi

原创 hdu5930 GCD線段樹

題目大意:給一個序列,每次換一個位置的值,求每次更新後任意連續的序列的gcd,有幾個不同的。序列長度和數字大小<=10W 修改5w次 題解:一開始求出整個每個不同gcd的值可以出現多少次,更新的話對左端所有相同gcd的段求出來,和右端的的

原创 hdu5826Rikka with Sequence 線段樹

題意:三種操作,一種是區間增加,一種是區間開方,一種是區間求和。 1 很快能想到,如果一個100000的數字,最多開方個四五次以後,就變成1了,而且sqrt(1)=1,那麼我們就可以在更新的時候想到一個很方便的剪枝,就是,如果這個區間的最

原创 hdu5758 Explorer Bo 樹形dp 最小鏈覆蓋

題目:給你一棵樹,用最少的鏈去覆蓋這棵樹,求鏈的最小總長度。 解析:num爲葉子節點數,顯然鏈數是(num+1)/2。如果是偶數,就是葉子節點到葉子節點,如果是奇數,那麼就是在奇數-1情況下的樹下加一條葉子到其祖先的鏈。 偶數的情況

原创 hdu5760 Palindrome Bo 經典dp

Description 給出n個數,要找到一個合法的最長子序列s,輸出其長度,並且輸出不同的s的個數。s序列必須是迴文的,並且中間最小,往兩邊依次不減。s1與s2不同當且僅當長度不同或者存在某位s1[i]!=s2[i] Input 多組用