AT_s8pc_2_h Counting 1's
Description
[problemUrl]: https://atcoder.jp/contests/s8pc-2/tasks/s8pc_2_h
長さ$ n $の数列があります。
そして、クエリが$ Q $個与えられます。
各クエリごとに、$ q_i $が与えられます。
・$ q_i $が$ 1 $のとき、範囲$ l_i≦i<r_i $の範囲のビットを反転させます。
・$ q_i $が$ 2 $のとき、範囲$ l_i≦i<r_i $の範囲に$ 1 $が何個存在するか出力します。
このようなクエリを処理するプログラムを書いてください。
ただし、初期値はすべての位置で$ 0 $とし、一番最初を$ 0 $番目とします。
たとえば、$ n=7,q_i,l_i,r_i $が以下の表のような場合、ビットの状態は以下のようになります。
{$ q_i,l_i,r_i $} 0 0 0 0 0 0 0 出力値 {1,2,5} 0 0 1 1 1 0 0 - {1,4,7} 0 0 1 1 0 1 1 - {2,1,6} 0 0 1 1 0 1 1 3 {1,0,4} 1 1 0 0 0 1 1 - {2,3,7} 1 1 0 0 0 1 1 2 {1,2,6} 1 1 1 1 1 0 1 - {2,0,7} 1 1 1 1 1 0 1 6よって、出力は以下のようになります。
```
3
2
6
```
Input Format
入力は以下の形式で標準入力から与えられる。
> $ n $ $ Q $ $ q_1 $ $ l_1 $ $ r_1 $ $ : $ $ : $ $ : $ $ q_Q $ $ l_Q $ $ r_Q $
- $ 1 $ 行目には, 数列の長さ$ n $ とクエリの数$ Q $が空白区切りで与えられます。
- $ 2 $ 行目から$ Q+1 $行目にかけて、$ q_i,l_i,r_i $が空白区切りで与えられます。
- $ q_i $はクエリの種類、$ l_i,r_i $はそれぞれ左端、右端の位置です。
- ただし、求める(または反転させる)範囲は右端-1の位置までなので注意すること。
Output Format
出力は以下の形式で標準出力に従うこと。
- 各出力クエリごとに、$ l_i≦ $(位置)$ <r_i $の範囲の$ 1 $の個数を出力してください。
- 各クエリごとに、改行を忘れないこと。
Explanation/Hint
### 制約
- $ 1≦n,Q≦100,000 $
- $ 0≦l_i<r_i≦n $
- $ 1≦q_i≦2 $
### 小課題
小課題 $ 1 $ \[ $ 4 $ 点 \]
- $ 1≦n,Q≦1,000 $ を満たす。
小課題 $ 2 $ \[ $ 12 $ 点 \]
- 出力クエリの数は$ 1,000 $個以内である。
小課題 $ 3 $ \[ $ 36 $ 点 \]
- 出力クエリの$ l_i,r_i $は、それぞれ$ 0,n $である。
小課題 $ 4 $ \[ $ 48 $ 点 \]
- 追加の制約はない。
### Sample Explanation 1
数列の値は、以下のように変化します。 {$ q_i,l_i,r_i $} 0 0 0 0 0 0 0 0 出力値 {1,3,7} 0 0 0 1 1 1 1 0 - {2,2,5} 0 0 0 1 1 1 1 0 2 {1,2,4} 0 0 1 0 1 1 1 0 - {2,1,6} 0 0 1 0 1 1 1 0 3
### Sample Explanation 2
数列の値は以下のように変化します。 {$ q_i,l_i,r_i $} 0 0 0 0 0 出力値 {1,0,3} 1 1 1 0 0 - {1,2,5} 1 1 0 1 1 - {2,1,4} 1 1 0 1 1 2