剛剛學了,線段樹,一道線段樹入門題試試水
下面是題面
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 61011101001
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資料夾。其他路徑同理...