Loj 【CQOI 2006】简单题,mmp
#10117. 「一本通 4.1 練習 2」簡單題
?題目描述
題目來源:CQOI 2006
有一個?nnn?個元素的數組,每個元素初始均為?000。有?mmm?條指令,要么讓其中一段連續序列數字反轉——000?變?111,111?變?000(操作?111),要么詢問某個元素的值(操作?222)。
例如當?n=20n=20n=20?時,101010?條指令如下:
| 1?1?101\ 1\ 101?1?10 | N/A | 111111111100000000001111111111000000000011111111110000000000 |
| 2?62\ 62?6 | 111 | 111111 ̄1111000000000011111\underline{1}1111000000000011111??1??11110000000000 |
| 2?122\ 122?12 | 000 | 111111111100 ̄0000000011111111110\underline{0}0000000011111111110??0??00000000 |
| 1?5?121\ 5\ 121?5?12 | N/A | 111100000011000000001111000000110000000011110000001100000000 |
| 2?62\ 62?6 | 000 | 111100 ̄0000110000000011110\underline{0}0000110000000011110??0??00001100000000 |
| 2?152\ 152?15 | 000 | 111100000011000 ̄0000011110000001100\underline 00000011110000001100??0??00000 |
| 1?6?161\ 6\ 161?6?16 | N/A | 11110111110011110000 1111011111001111000011110111110011110000 |
| 1?11?171\ 11\ 171?11?17 | N/A | 111101111111000010001111011111110000100011110111111100001000 |
| 2?122\ 122?12 | 111 | 111101111111 ̄0000100011110111111\underline 10000100011110111111??1??00001000 |
| 2?62\ 62?6 | 111 | 111101 ̄1111110000100011110\underline 11111110000100011110??1??11111100001000 |
輸入格式
第一行包含兩個整數?n,mn,mn,m,表示數組的長度和指令的條數;
以下?mmm?行,每行的第一個數?ttt?表示操作的種類:
- 若?t=1t=1t=1,則接下來有兩個數?L,RL, RL,R,表示區間?[L,R][L, R][L,R]?的每個數均反轉;
- 若?t=2t=2t=2,則接下來只有一個數?iii,表示詢問的下標。
輸出格式
每個操作?222?輸出一行(非?000?即?111),表示每次操作?222?的回答。
樣例
樣例輸入
20 10 1 1 10 2 6 2 12 1 5 12 2 6 2 15 1 6 16 1 11 17 2 12 2 6樣例輸出
1 0 0 0 1 1數據范圍與提示
對于?50%50\%50%?的數據,1≤n≤103,1≤m≤1041\le n\le 10^3,1\le m\le 10^41≤n≤10?3??,1≤m≤10?4??;
對于?100%100\%100%?的數據,1≤n≤105,1≤m≤5×1051\le n\le 10^5,1\le m\le 5\times 10^51≤n≤10?5??,1≤m≤5×10?5??,保證?L≤RL\le RL≤R。
?
?
分析
其實這道題很簡單(只要你想得到的話)
首先區間操作,區間查詢,很容易想到 RMQ ,然后樹狀數組和線段樹貌似沒有翻轉區間信息的功能啊。怎么辦呢?
那么我們考慮一下這道題的性質:最后得到的數字只可能是 0 或 1 也就是說如果某個位置被翻轉兩遍那么效果是一樣的。。。
然后要非常生硬的聯想到位運算 & ...?
接下來我們這么操作(鑒于樹狀數組常數小那么就用樹狀數組的講法了,至于線段樹也就是永久化標記的事兒):
我們每次直接去加一個區間的左端點 l 以及右端點 r+1 ,那么 r+1 以及后面位置上的數被翻轉了兩次,最低位還是不變
查詢的時候我們直接單點查詢(這里不需要什么騷操作,直接查詢 x 的前綴和就好了,因為前面區間沒有覆蓋到 x 的話必然是向后累加了兩次的,效果會抵消)。
沒錯,很樸素。沒錯,很簡單。沒錯,就是想不到。
?
代碼
轉載于:https://www.cnblogs.com/Judge/p/9630412.html
總結
以上是生活随笔為你收集整理的Loj 【CQOI 2006】简单题,mmp的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JS自学笔记04
- 下一篇: 小程序---模板的引用与使用