CSUOJ 1770按鈕控制彩燈實驗 區間覆蓋

2021-08-06 04:39:03 字數 1626 閱讀 7161

1770: 按鈕控制彩燈實驗

submit page summary time limit: 1 sec memory limit: 128 mb submitted: 295 solved: 106

description

應教學安排,yy又去開心的做電學實驗了。實驗的內容分外的簡單一串按鈕通過程式設計了的eeprom可以控制一串彩燈。然而選擇了最low的一種一對一的控制模式,並很快按照實驗指導書做完實驗的yy馬上感覺到十分無趣。於是他手指在一排按鈕上無聊的滑來滑去,對應的彩燈也不斷的變化著開關。已知每乙個按鈕按下會改變對應乙個彩燈的狀態,如此每次yy滑動都會改變一串彩燈的狀態。現已知彩燈最初的狀態,已經yy n次無聊的滑動的起點和終點l,r。現問彩燈最終的狀態。

input

有多組資料。

每組資料第一行,n(1<=n<=10^5)代表彩燈串長度,t(0<=t<=10^5)代表yy滑動的次數

第二行n個數(0表示滅1表示亮)給出n個彩燈的目前的狀態。

之後t行每行兩個數li,ri(1<=li<=ri<=n)代表每次滑動的區間。

output

每組用一行輸出最終的串的狀態,格式見樣例。

sample input

3 2

1 0 1

1 3

2 3

sample output

0 0 1

hint

source

ottff

給定初始01狀態,然後每次區間覆蓋後狀態反轉,0變1,1變0,問終止狀態

可以轉化為被覆蓋了多少次,奇數變,偶數不變。

利用樹狀陣列,那麼對於每乙個l,r,區間[1,r]+1,區間[1,l-1]-1,然後對於每個點getsum即可

然而並不需要那麼複雜

可以對l,r,f[l]++,f[r+1]–,每次到達乙個位置就res+=f[i],然後判斷res奇偶性即可

第一種做法(樹狀陣列)

#include

#include

#include

#include

using

namespace

std;

const

int maxn=1e5+10;

int n,t,ax[maxn],c[maxn];

int lowbit(int x)

void add(int x,int val)

int sum(int x)

int main()

for(int i=1;i<=n;i++)

printf("\n");

}return

0;}

第二種做法:

#include

#include

#include

const

int n =1e5+7;

int a[n],n,m,f[n],l,r;

int main()

int sum=0;

for(int i=1;i<=n;++i)

for(int i=1;i<=n;++i)printf("%d ",a[i]);

printf("\n");

}}

177 單詞替換

題目描述 你需要輸出替換之後的句子。示例 1 輸入 dict 詞典 cat bat rat sentence 句子 the cattle was rattled by the battery 輸出 the cat was rat by the bat 注 輸入只包含小寫字母。1 字典單詞數 1000...

careercup 中等難度 17 7

17.7 給定乙個整數,列印該整數的英文描述 例如 one thousand,two hundred thirty four 解法 舉個例子,在轉換19 323 984時,我們可以考慮分段處理,沒三位轉換一次,並在適當的地方插入 thousand 千 和 million 百萬 也即,convert ...

177 有限制的素數

輸入檔案 qprime.in 輸出檔案 qprime.out 簡單對比 時間限制 1 s 記憶體限制 128 mb farmer john 開始給奶牛們標記上素數的牌子,貝茜注意到了這一切,她對各種數的牌子很好奇。請幫助貝茜算出從a到b 1 a b 4,000,000 b a 1,000,000 b...