1098: 樹狀陣列2(破壞公路)
時間限制: 1 sec 記憶體限制: 128 mb
提交: 111 解決: 21
[提交][狀態][討論版]
題目描述
題目描述:
在太平洋中心有乙個圓形小島,沿著小島的海岸線分布著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
#include
using
namespace
std;
int n,m;
int control[500005];
int vis[500005];
int lowbit(int x)
void change(int x,int k)
}int getnum(int x)
return ans;
}int main()
if (getnum(y-1)-getnum(x-1)==0)
printf("1\n");
else
if ((getnum(x-1)==0)&&(getnum(n-1)-getnum(y-1)==0)&&vis[n]==0)
printf("1\n");
else
printf("0\n");
}else
else
change(x,temp);}}
printf("\n");
}return
0;}
樹狀陣列2(破壞公路)
題目描述 在太平洋中心有乙個圓形小島,沿著小島的海岸線分布著 n個小鎮,編號分別為 1,2,3 n 小鎮i 1 小鎮i 小鎮i 1 是相鄰的 當然小鎮 n與小鎮 1相鄰 相鄰小鎮之間存在一條公路,公路也有編號,公路 i連線小鎮 i和小鎮 i 1,公路 n連線小鎮 n和小鎮 1.現在對小島有 m個操作...
樹狀陣列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的時間即可,但...