洛谷 P2574 XOR的藝術

2022-03-13 05:22:28 字數 1586 閱讀 7692

剛剛學了,線段樹,一道線段樹入門題試試水

下面是題面

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]的傷害

對於每次詢問傷害,輸出乙個數值傷害,每次詢問輸出一行

10 6

1011101001

0 2 4

1 1 5

0 3 7

1 1 10

0 1 4

1 2 6

361

讀完題,題意就很明顯了,明顯是一道線段樹的題,線段樹的題嘛,關鍵一般就在pushup和pushdown上,既然是異或1,那麼第二次異或也就相當於沒有異或,同理奇數次異或則變,偶數次異或不變

下放**

#include#include#include#define ll long long

#define maxn 200005

#define gc() getchar()

using namespace std;

int n,m;

char a[maxn];

inline ll read()

while(isdigit(p))

return a*f;

}#define lc p<<1 //左兒子

#define rc p<<1|1 //右兒子

struct ahahat[maxn<<2]; //開四倍大小,防越界

inline void pushup(int p)

inline void pushdown(int p,int l,int r)

void build(int p,int l,int r)

int m=l+r>>1;

build(lc,l,m);build(rc,m+1,r);

pushup(p);

}void update(int p,int l,int r,int l,int r)

ll query(int p,int l,int r,int l,int r)

inline void solve_1()

inline void solve_2()

int main()

} return 0;

}

洛谷P2574 XOR的藝術

就不說題意了,畢竟中文的簡單題意,很顯然的線段樹,用 lazy陣列去維護一下區間被修改多少次,每次區間被修改,區間中1的個數就變成區間長度減去原來區間中1的個數,然後就能解決這道題了。感覺洛谷評分有問題,這明明是道很簡單的題,為什麼這能是藍題。狀態太差了,我要刷題!最後,includeusing n...

XOR的藝術 洛谷P2574

題目描述 akn覺得第一題太水了,不屑於寫第一題,所以他又玩起了新的遊戲。在遊戲中,他發現,這個遊戲的傷害計算有乙個規律,規律如下 1 擁有乙個傷害串為長度為n的01串。2 給定乙個範圍 l,r 傷害為傷害串的這個範圍內中1的個數 3 會被隨機修改傷害串中的數值,修改的方法是把 l,r 中的所有數x...

題解 洛谷P1738 洛谷的資料夾

一 目錄概覽 二 題目大意 三 大致思路 四 實現 五 剖析 六 總結回顧 kkksc03想好了很多應該有的資料夾路徑名。問題是,需要是使這些資料夾都存在,需要新建幾個資料夾呢?資料夾路徑是什麼?例如 a b c,表示在根目錄下有a資料夾,在a資料夾裡有b資料夾,在b資料夾裡有c資料夾。其他路徑同理...