luogu1503 鬼子進村

2022-04-10 05:56:52 字數 1148 閱讀 8252

題目鏈結

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

#include#include#include#include#include#include#define ls tr[cur].ch[0]

#define rs tr[cur].ch[1]

using namespace std;

typedef long long ll;

const int n = 50100,inf = 60000;

ll read()

while(c>='0'&&c<='9')

return x*f;

}int n,m;

struct node tr[n];

void rotate(int &cur,int f)

int tot;

void insert(int &cur,int val)

int d = val > tr[cur].val;

insert(tr[cur].ch[d],val);

if(tr[tr[cur].ch[d]].id < tr[cur].id) rotate(cur,d);

}void del(int &cur,int val)

int d = tr[ls].id > tr[rs].id;

rotate(cur,d);

del(cur,val);

}else del(tr[cur].ch[val > tr[cur].val],val);

}int pred(int cur,int val)

int nex(int cur,int val)

int sta[n],top;

int bz[n];

int main()

if(c == 'r') del(rt,sta[top--]),bz[sta[top + 1]] = 0;

if(c == 'q')

int r = nex(rt,x),l = pred(rt,x);

printf("%d\n",r - l -1);}}

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維護位置,二分得到左右,...

題解 Luogu P1503 鬼子進村

這道題思維有點難,要把被摧毀的節點插入平衡樹,而不是把沒有摧毀的節點插入 先把0和n 1插入平衡樹,作為邊界 操作1 摧毀節點,把該點插入平衡樹 操作2 修復最後乙個被摧毀節點的位置的可以用棧來求出,並把該點位置從平衡樹中刪除 操作三 搞乙個vis陣列,記錄是否被摧毀,如果被摧毀了,直接輸出0,沒被...

LG1503 鬼子進村 平衡樹

考慮維護每個被摧毀的點,摧毀時入棧,修復時彈出棧並在平衡樹中刪除之。對於詢問,求前驅後繼之差即可,注意詢問點為已存在的特判。include include using namespace std int fa 50005 ch 50005 2 k 50005 ind 0,root 0,m,n int...