題解 Luogu P1503 鬼子進村

2022-04-30 13:24:16 字數 1337 閱讀 1624

這道題思維有點難,要把被摧毀的節點插入平衡樹,而不是把沒有摧毀的節點插入

先把0和n+1插入平衡樹,作為邊界

操作1:摧毀節點,把該點插入平衡樹

操作2:修復最後乙個被摧毀節點的位置的可以用棧來求出,並把該點位置從平衡樹中刪除

操作三:搞乙個vis陣列,記錄是否被摧毀,如果被摧毀了,直接輸出0,沒被摧毀的話,輸出該點後繼的位置-該點前驅的位置-1,這應該也很好理解qaq

剩下就沒什麼問題了(除了**有點長)

#pragma gcc optimize("o3")

#include #define root tree[0].ch[1]

#define inf 1000000005

using namespace std;

inline int read()

while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+ch-'0',ch=getchar();

return x*f;

}inline void write(register int x)

inline int min(register int a,register int b)

struct splaytree[50005];

int tot=0;

inline bool findd(register int x)

inline void connect(register int x,register int fa,register int son)

inline void update(register int x)

inline void rotate(register int x)

inline void splay(register int x,register int to)

}inline int newpoint(register int v,register int fa)

inline void insert(register int x)

else

int nxt=x1)

else

else

}}inline int lower(register int v)

return ans;

}inline int upper(register int v)

return ans;

}bool vis[50005];

int stac[50005],top=-1;

int main()

else if(ch=='r')

else

}} return 0;

}

洛谷 1503 鬼子進村 題解

部落格觀賞效果更佳 給定乙個長度為n 5 e4 n 5e4 n 5 e4 的01 0101 序列,一開始都是1 11。支援三種操作 修改某乙個位置為0 00撤銷上一次修改 詢問包含某個位置的最長的連續的1 11的個數。m ul tise tmultiset multis et維護位置,二分得到左右,...

洛谷P1503 鬼子進村 題解

原題 題目描述 縣城裡有 n nn 個用地道相連的房子,第 i ii 個只與第 i 1 i 1i 1 和第 i 1 i 1i 1 個相連。這時有 m mm 個訊息依次傳來 若訊息為 d x 鬼子將 x xx 號房子摧毀了,地道被堵上。若訊息為 q x 有一名士兵被圍堵在 x xx 號房子中。李雲龍收...

luogu1503 鬼子進村

題目鏈結 將哪些村莊已經被摧毀了放到treap裡。查詢的時候如果當前村莊已經被毀了,那麼就可以直接輸出0.不然就輸出這個村莊的後繼 前驅 1。原因顯然 include include include include include include define ls tr cur ch 0 defi...