洛谷P2757 國家集訓隊 等差子串行

2021-10-17 21:41:55 字數 863 閱讀 3702

題意簡化就是找到a[i] a[j] a[k]成乙個len=3的等差數列,且a[j]-a[i]=a[k]-a[j]

那麼列舉a[j],為方便從左到右列舉,設數字x在j左邊為1,在右邊為0

那麼可以用樹狀陣列維護乙個hash值,如果a[j]+d和a[j]-d在不同邊也就是乙個是0乙個是1,那麼就存在一組等差序列了

也就是這個hash值如果不相等,說明某一對a[j]+d和a[j]-d分別在j的左邊和右邊,那麼就有解

這個hash值要維護乙個正著的乙個倒著的,因為一邊是+d一邊是-d,我們要讓a[j]-1和a[j]+1一一對應起來,就是將第乙個樹狀陣列b1的a[j]-1與b2的n-a[j]對齊,然後短的那邊補成場的也就是乘以hash的base的那麼多次冪,長的那邊擷取短的長度,看這兩個值一不一樣

#includeusing namespace std;

typedef unsigned long long ull;

const int maxl=1e5+10;

const int bas=1423333;

int n,ans;

int a[maxl],pre[maxl],suf[maxl];

ull mi[maxl];

struct bit

inline void add(int i,ull x)

inline ull sum(int i)

}b1,b2;

inline void prework()

inline void mainwork()

else

}}inline void print()

int main()

return 0;

}

luogu P2757 國家集訓隊 等差子串行

簡述題意 時間複雜度 o t n 2 難度 noip 演算法 據說正解是 線段樹 樹狀陣列 維護 hash 但我是用迴圈水過的,逃.我們只需要找到序列長度為3的即可!我們考慮將讀入的這個點作為乙個等差序列子串行的中間元素x,那麼我們列舉它左邊的元素a x 因為我們還需要保證下標單調遞增,所以我們對所...

國家集訓隊 等差子串行 題解

題面 我們尋找乙個東西總是比判斷乙個東西複雜,對吧 那麼就轉化思路 如果我們知道等差數列的中間項mid,那麼就是尋找一對數 l,r 使得abs mid l abs mid r 且l 可以列舉每個數作為中間項,然後o n 的判斷是否存在這樣的數對 l,r 但這是o n 2 的,複雜度無法接受 那麼考慮...

洛谷 P1505 國家集訓隊 旅遊

洛谷傳送門 ray 樂忠於旅遊,這次他來到了 t 城。t 城是乙個水上城市,一共有 nn 個景點,有些景點之間會用一座橋連線。為了方便遊客到達每個景點但又為了節約成本,t 城的任意兩個景點之間有且只有一條路徑。換句話說,t 城中只有 n 1n 1 座橋。ray 發現,有些橋上可以看到美麗的景色,讓人...