題目描述
akn覺得第一題太水了,不屑於寫第一題,所以他又玩起了新的遊戲。在遊戲中,他發現,這個遊戲的傷害計算有乙個規律,規律如下
1、 擁有乙個傷害串為長度為n的01串。
2、 給定乙個範圍[l,r],傷害為傷害串的這個範圍內中1的個數
3、 會被隨機修改傷害串中的數值,修改的方法是把[l,r]中的所有數xor上1
akn想知道一些時刻的傷害,請你幫助他求出這個傷害
輸入輸出格式
輸入格式:
第一行兩個數n,m,表示長度為n的01串,有m個時刻
第二行乙個長度為n的01串,為初始傷害串
第三行開始m行,每行三個數p,l,r
若p為0,則表示當前時刻改變[l,r]的傷害串,改變規則如上
若p為1,則表示當前時刻akn想知道[l,r]的傷害
輸出格式:
對於每次詢問傷害,輸出乙個數值傷害,每次詢問輸出一行
輸入輸出樣例
輸入樣例#1: 複製
10 6
1011101001
0 2 4
1 1 5
0 3 7
1 1 10
0 1 4
1 2 6
輸出樣例#1: 複製36
1說明樣例解釋:
詢問[1,5]輸出3
詢問[1,10]輸出6
詢問[2,6]輸出1
資料範圍:
10%資料2≤n,m≤10
另有30%資料2≤n,m≤2000
100%資料2≤n,m≤2*10^5
#include
#include
#include
#define maxx 300020
#define ll long long
using
namespace std;
int n,m,p,l,r,a[maxx]
;char s[maxx]
;ll add[maxx<<2]
,sum[maxx<<2]
;inline
void
getup
(int rt)
inline
void
bulid
(int l,
int r,
int rt)
int mid=
(l+r)
>>1;
bulid
(l,mid,rt<<1)
;bulid
(mid+
1,r,rt<<1|
1);getup
(rt);}
inline
void
pushdown
(int rt,
int len)
}inline ll query
(int l,
int r,
int l,
int r,
int rt)
inline
void
update
(int l,
int r,
int l,
int r,
int rt)
int mid=
(l+r)
>>1;
if(l<=mid)
update
(l,r,l,mid,rt<<1)
;if(mid+
1<=r)
update
(l,r,mid+
1,r,rt<<1|
1);getup
(rt);}
intmain()
return0;
}
洛谷P2574 XOR的藝術
就不說題意了,畢竟中文的簡單題意,很顯然的線段樹,用 lazy陣列去維護一下區間被修改多少次,每次區間被修改,區間中1的個數就變成區間長度減去原來區間中1的個數,然後就能解決這道題了。感覺洛谷評分有問題,這明明是道很簡單的題,為什麼這能是藍題。狀態太差了,我要刷題!最後,includeusing n...
洛谷 P2574 XOR的藝術
剛剛學了,線段樹,一道線段樹入門題試試水 下面是題面 akn覺得第一題太水了,不屑於寫第一題,所以他又玩起了新的遊戲。在遊戲中,他發現,這個遊戲的傷害計算有乙個規律,規律如下 1 擁有乙個傷害串為長度為n的01串。2 給定乙個範圍 l,r 傷害為傷害串的這個範圍內中1的個數 3 會被隨機修改傷害串中...
題解 洛谷P1738 洛谷的資料夾
一 目錄概覽 二 題目大意 三 大致思路 四 實現 五 剖析 六 總結回顧 kkksc03想好了很多應該有的資料夾路徑名。問題是,需要是使這些資料夾都存在,需要新建幾個資料夾呢?資料夾路徑是什麼?例如 a b c,表示在根目錄下有a資料夾,在a資料夾裡有b資料夾,在b資料夾裡有c資料夾。其他路徑同理...