原題位址
題意就不解釋了吧。
看到這道題,一開始yy把所有點加進treap裡面,然後完全跟著操作走,應該是可做的。[在treap裡面找連續的一段應該很簡單,只要有一定**能力都行|||||||吧。。。。]
可不幸的因為本人太弱,不想寫,就不得不yy其它的做法,我們可以發現,被困士兵能通過的房子組成的序列的兩個端點為被毀滅的兩個房屋。[左端點有可能為零,即最左端,右端點可能為n+1,即最右端] 所以我們每次把被刪除的端點加入treap,對於查詢,我們查當前士兵的前驅和後繼即可
上** :
#include#include#include#include#include#include#includeconst int n = 5e4 + 7,inf = 0x7fffffff;
#define r121() ((rand()<<12)+(rand()<<7)+rand())
#include#define r233() (r121() % 456454541 + r121() % 452112101 + r121() % 121231 + 1)
using std :: bitset;
int n,m,v;
class treap
node (int data,node *fl) : data(data)
void update ()
}*null,*root,*pool,meme[n];
int ball;
void rotate (node *&t,bool v)
void insert (node *&t)
bool v = t -> data < ball;
insert (t -> son[v]);
if(t -> son[v] -> hr < t -> hr) rotate (t , v);
else t -> update(); }
void delete (node *&t)
bool v = t -> son[0] -> hr > t -> son[1] -> hr;
rotate (t , v);
delete (t -> son[v^1]);
} else
t -> update(); }
int subsequent (node *&t)
int precursor (node *&t)
public :
treap ()
void clear ()
void ins (int ***)
void del (int ***)
int sub (int ***)
int pre (int ***)
}treap;
char opt[n];
bitsetvis;
int stk[n],top;
int main ()
else if(opt[0] == 'q')
} }return 0;
}
that is all. thank you for watching!
洛谷 P1503 鬼子進村
描述 縣城裡有n個用地道相連的房子,第i個只與第i 1和第i 1個相連。這是有m個訊息依次傳來 1 訊息為d x 鬼子將x號房子摧毀了,地道被堵上。3 訊息為q x 有一名士兵被圍堵在x號房子中。李雲龍收到資訊很緊張,他想知道每乙個被圍堵的士兵能夠到達的房子有幾個。輸入格式 第一行2個整數n,m n...
洛谷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 號房子中。李雲龍收...
洛谷P1503 鬼子進村 平衡樹,STL
題目傳送門 描述 縣城裡有n個用地道相連的房子,第i個只與第i 1和第i 1個相連。這是有m個訊息依次傳來 1 訊息為d x 鬼子將x號房子摧毀了,地道被堵上。3 訊息為q x 有一名士兵被圍堵在x號房子中。李雲龍收到資訊很緊張,他想知道每乙個被圍堵的士兵能夠到達的房子有幾個。輸入格式 第一行2個整...