1. 程式人生 > >洛谷—— P1503 鬼子進村

洛谷—— P1503 鬼子進村

-- reg sam class tchar 輸入輸出格式 adg argc style

https://www.luogu.org/problemnew/show/P1503

題目背景

小卡正在新家的客廳中看電視。電視裏正在播放放了千八百次依舊重播的《亮劍》,劇中李雲龍帶領的獨立團在一個縣城遇到了一個鬼子小隊,於是獨立團與鬼子展開遊擊戰。

題目描述

描述 縣城裏有n個用地道相連的房子,第i個只與第i-1和第i+1個相連。這是有m個消息依次傳來

1、消息為D x:鬼子將x號房子摧毀了,地道被堵上。

2、消息為R :村民們將鬼子上一個摧毀的房子修復了。

3、消息為Q x:有一名士兵被圍堵在x號房子中。

李雲龍收到信息很緊張,他想知道每一個被圍堵的士兵能夠到達的房子有幾個。

輸入輸出格式

輸入格式:

第一行2個整數n,m(n,m<=50000)。

接下來m行,有如題目所說的三種信息共m條。

輸出格式:

對於每一個被圍堵的士兵,輸出該士兵能夠到達的房子數。

輸入輸出樣例

輸入樣例#1: 復制
7 9
D 3
D 6
D 5
Q 4
Q 5
R
Q 4
R
Q 4
輸出樣例#1: 復制
1
0
2
4

說明

若士兵被圍堵在摧毀了的房子中,那只能等死了。。。。。。

stl——set

 1 #include <cstdio>
 2 #include <set
> 3 4 using namespace std; 5 6 inline void read(int &x) 7 { 8 x=0; register char ch=getchar(); 9 for(; ch>9||ch<0; ) ch=getchar(); 10 for(; ch>=0&&ch<=9; ch=getchar()) x=x*10+ch-0; 11 } 12 13 set<int>_set; 14 set<int>::iterator pos;
15 16 int n,m,x,tail,que[50005]; 17 18 int Presist() 19 { 20 read(n),read(m); 21 _set.insert(0); 22 _set.insert(n+1); 23 for(char s[1]; m--; ) 24 { 25 scanf("%s",s); 26 if(s[0]==D) 27 { 28 read(x); 29 _set.insert(x); 30 que[++tail]=x; 31 } 32 else if(s[0]==Q) 33 { 34 read(x); 35 pos=_set.lower_bound(x); 36 if(*pos==x) puts("0"); 37 else printf("%d\n",(int)*pos-*(--pos)-1); 38 } 39 else 40 { 41 pos=_set.find(que[tail--]); 42 _set.erase(pos); 43 } 44 } 45 return 0; 46 } 47 48 int Aptal=Presist(); 49 int main(int argc,char**argv){;}

洛谷—— P1503 鬼子進村