XOR的藝術 洛谷P2574

2021-09-25 08:41:42 字數 1854 閱讀 7992

題目描述

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資料夾。其他路徑同理...