樹狀陣列2(破壞公路)

2021-08-17 08:31:39 字數 1793 閱讀 9458

題目描述

在太平洋中心有乙個圓形小島,沿著小島的海岸線分布著

n個小鎮,編號分別為

1,2,3~~n

;小鎮i-1

、小鎮i

、小鎮i+1

是相鄰的(當然小鎮

n與小鎮

1相鄰)。相鄰小鎮之間存在一條公路,公路也有編號,公路

i連線小鎮

i和小鎮

i+1,公路

n連線小鎮

n和小鎮

1.現在對小島有

m個操作,操作有兩種:

詢問操作:

1 x y

代表小鎮

x到小鎮

y是否聯通,聯通輸出

1,否則輸出

0 修改操作:

0 x

代表修改公路

x,如果公路原來是完好的,則斷開,否則修好公路x。

輸入格式

:輸入第一行為乙個整數

t,代表下來有

t組資料

每組資料輸入第一行包含兩個整數n,

m,分別表示小鎮個數和操作命令數目。

輸入接下來的

m行,每一行代表一條操作指令。

輸出格式

:對於相鄰兩組資料之間要留一空行。

輸入樣例:

1 5 10 

1 2 5 

0 4 

1 4 5 

0 2 

1 3 4 

1 1 3 

0 1 

0 2 

1 2 4 

1 2 5 

輸出樣例:

1 1 

1 0 

1 0 

資料規模

: 對於

20%的資料滿足:

1 < = n, m <=1000。對於

40%的資料滿足:

1 < = n, m <= 100000。對於

100%

的資料滿足:

1 < = n, m <= 500000

解題思路:這道題目是樹狀陣列的乙個小變形。其實與樹狀陣列原版也不沒有太大的區別。

**:(請不要直接拷貝哦)

#include#include#includeusing namespace std;

int n,m,c[500005];

bool vis[500005];

inline int lowbit(int x)//標配

inline void add(int x,int y)//標配

}inline int sum(int x)//標配

return s;

}int main()

if (sum(y-1)-sum(x-1)==0)

printf("1\n"); else

if ((sum(x-1)==0)&&(sum(n-1)-sum(y-1)==0)&&(vis[n]==0))

printf("1\n"); else

printf("0\n");

}else

else

add(x,ss);//改變}}

printf("\n");//兩個資料間要有空行

}return 0;

}

1098 樹狀陣列2(破壞公路)

1098 樹狀陣列2 破壞公路 時間限制 1 sec 記憶體限制 128 mb 提交 111 解決 21 提交 狀態 討論版 題目描述 題目描述 在太平洋中心有乙個圓形小島,沿著小島的海岸線分布著n個小鎮,編號分別為1,2,3 n 小鎮i 1 小鎮i 小鎮i 1是相鄰的 當然小鎮n與小鎮1相鄰 相鄰...

樹狀陣列2

1157 新年彩燈 time limit 1 sec memory limit 128 mb submit 73 solved 25 submit status web board description 新年將至,yy準備掛一片彩燈,形狀呈矩形,已知彩燈剛掛完的彩燈共有n n盞 第一排編號為 1,...

樹狀陣列2 更高深的樹狀陣列

一 區間修改區間求和 這個東西可就不是把 單點查詢區間修改 和 單點修改區間查詢 合起來那麼簡單了,仔細想想,拿之前的辦法都不咋地好做,那麼怎麼辦呢,我們還是要用到差分陣列,設原陣列為a,差分陣列為b,則b 1 a 1 b i a i a i 1 那麼區間修改我們就解決了,只需要log的時間即可,但...