zcmu1156(樹狀陣列)

2021-08-21 21:28:04 字數 1429 閱讀 9869

time limit: 1 sec  memory limit: 128 mb

submit: 498  solved: 65

[submit][status][web board]

新年將至,yy準備掛一排彩燈,已知彩燈剛掛完的彩燈共有n盞(編號為1,2,3,……),並且都是滅的。彩燈的閃爍由一段程式控制。

每一秒鐘程式會生成兩個正整數a和b(1<=a,b<=n),然後將編號為a和b之間的所有燈的狀態改變一次,即如果燈i是滅的,那麼經過一次改變,燈i會亮,如果燈i是亮的,經過一次改變,燈i會滅。

當yy看著自己掛的彩燈不斷閃爍的時候,問題來了,yy想知道任意時刻某一區間燈的狀態。

多組測試資料,每一組第一行是乙個整數n(1<=n<=1000000)和乙個整數m(1<=m<=3000)。

然後是m行資料,包括以下兩種形式:

1 a b 表示燈a和燈b之間的燈(含燈a和燈b)變換一次狀態。

0 x y 表示yy想知道此刻燈x到燈y(包含燈x和燈y)的狀態.

對於每次yy想知道結果的時候,輸出一行燈的狀態(編號小的燈優先),如果是亮的輸出」1」,否則輸出」0」;

3 3

1 1 2

1 2 3

0 1 3

101[submit][status][web board]

中文english

anything about the problems, please contact admin:admin

解析:很久以前做過的一道樹狀陣列的題目,超時了。以為是要線段樹去解決的,事實上,並不是。

就是因為有可能a>b.orx>y,這一點給忽略了。所以一直超時。應該要對a,b預處理一下。交換大小。

如果樹狀陣列不清楚的 可以看看我總結的部落格-------樹狀陣列

#includeusing namespace std;

#define e exp(1)

#define pi acos(-1)

#define mod 1000000007

#define inf 0x3f3f3f3f

#define ll long long

#define ull unsigned long long

#define mem(a,b) memset(a,b,sizeof(a))

const int maxn=1000000+10;

int c[maxn];

int n,m,k,a,b;

int lowbit(int x)

void update(int i,int value)

}int getsum(int i)

return sum;

}int main()

if(k==1)

else }}

return 0;

}

zcmu 1156 新年彩燈 (樹狀陣列)

題目 time limit 1 sec memory limit 128 mb submit 502 solved 67 submit status web board 新年將至,yy準備掛一排彩燈,已知彩燈剛掛完的彩燈共有n盞 編號為1,2,3,並且都是滅的。彩燈的閃爍由一段程式控制。每一秒鐘程式...

zcmu1156 新年彩燈

time limit 1 sec memory limit 128 mb submit 534 solved 78 submit status web board 新年將至,yy準備掛一排彩燈,已知彩燈剛掛完的彩燈共有n盞 編號為1,2,3,並且都是滅的。彩燈的閃爍由一段程式控制。每一秒鐘程式會生成...

樹狀陣列1 樹狀陣列入門

仔細看一下,發現tree的每乙個節點的高度並不是隨意的,而是由它轉成二進位制之後末尾連續零的數量決定的,連續零的數量加1,就是高度,例如 3 11 零的數量為0,加1等於1,所以它的高度就是1 6 110 零的數量為1,加1等於2,所以它的高度就是2 8 1000 零的數量為3,加1等於4,所以它的...