BZOJ 2124 等差子串行

2022-04-30 08:51:08 字數 1261 閱讀 5339

time limit: 3 sec  memory limit: 259 mb

submit: 1041  solved: 376

[submit][status][discuss]

給乙個1到n的排列,詢問是否存在1<=p1=3),使得ap1,ap2,ap3,…aplen是乙個等差序列。

輸入的第一行包含乙個整數t,表示組數。下接t組資料,每組第一行乙個整數n,每組第二行為乙個1到n的排列,數字兩兩之間用空格隔開。

對於每組資料,如果存在乙個等差子串行,則輸出一行「y」,否則輸出一行「n」。23

1 3 2

33 2 1ny

對於100%的資料,n<=10000,t<=7

我們只需要判斷是否存在乙個長度為3的等差子串行就好...

首先我們有乙個很機智的想法...我們列舉中間的數x,判斷是否存在x-y和x+y分別在x兩邊...我們從左向右掃瞄當前數字記為中間數字,維護乙個vis陣列,vis[i]=1代表i在當前數字之前出現過,=0代表沒有出現過...然後只要當前數字的左右兩邊的01串不一樣就代表存在一組合法解...

這種判斷回文串的問題可以通過hash解決,但是我們要動態維護hash值,所以要借助樹狀陣列或者線段樹...

記得一定要開long long...

1 #include2 #include3 #include4 #include5

//by neighthorn

6#define int long long

7using

namespace

std;8//

眉眼如初,歲月如故910

const

int maxn=10000+5,mod=1e9+7;11

12int

n,cas,flag,p[maxn];

1314

struct

tree

2122 inline void insert(int x,int

y)27

28 inline int query(int

x)34

35 inline int qry(int l,int

r)38

39}a,b;

4041 signed main(void)57

if(!flag)

58 puts("n"

);59}60

return

0;

61 }

by neighthorn

BZOJ2124 等差子串行

挺厲害的題 我們考慮當前加入了第i個數,為x,那麼我們可以維護一下哪個數出現過,出現過為1,沒出現為0,那麼加入x的時候我們只需要判斷以x為中心的極長子串是否是回文串即可 用乙個樹狀陣列維護兩個方向的雜湊值即可 include include include include include incl...

bzoj 2124 等差子串行

description 給乙個1到n的排列,詢問是否存在1 p1 p2 p3 p4 p5 plen n len 3 使得ap1,ap2,ap3,aplen是乙個等差序列。input 輸入的第一行包含乙個整數t,表示組數。下接t組資料,每組第一行乙個整數n,每組第二行為乙個1到n的排列,數字兩兩之間用...

BZOJ 2124 等差子串行

給乙個1到n的排列,詢問是否存在 3 plen 使得ap1,ap2,ap3,aplen是乙個等差序列。輸入的第一行包含乙個整數t,表示組數。下接t組資料,每組第一行乙個整數n,每組第二行為乙個1到n的排列,數字兩兩之間用空格隔開。對於每組資料,如果存在乙個等差子串行,則輸出一行 y 否則輸出一行 n...