CQOI2006 簡單題 線段樹

2022-05-20 23:05:19 字數 955 閱讀 2439

水。區間修改,單點查詢。用線段樹維護區間\([l,r]\)內的所有\(1\)的個數,懶標記表示為當前區間是否需要反轉(相對於區間當前狀態),下方標記時懶標記取反即可。

#include #include #define sl (x<<1)

#define sr (x<<1|1)

#define maxn 100010

using namespace std;

struct nod tre[maxn*4];

void buildt(int l, int r, int x)

int mid=(l+r)>>1;

buildt(l, mid, x<<1);

buildt(mid+1, r, x<<1|1);

}void push_down(int x)

void change(int x, int ql, int qr)

push_down(x);

int mid=(tre[x].l+tre[x].r)>>1;

if(ql<=mid) change(sl,ql,qr);

if(qr>mid) change(sr,ql,qr);

tre[x].val=tre[sl].val+tre[sr].val;

}int query(int x, int q)

push_down(x);

int mid=(tre[x].l+tre[x].r)>>1;

int ans=0;

if(q<=mid) ans=query(sl,q);

else ans=query(sr,q);

tre[x].val=tre[sl].val+tre[sr].val;

return ans;

}int n,m;

int main()

else

}return 0;

}

CQOI 2006 線段樹之簡單題

description 有乙個n個元素的陣列,每個元素初始均為0。有m條指令,要麼讓其中一段連續序列數字反轉 0變1,1變0 操作1 要麼詢問某個元素的值 操作2 例如當n 20時,10條指令如下 第一行包含兩個整數n,m,表示陣列的長度和指令的條數,以下m行,每行的第乙個數t表示操作的種類。若t ...

CQOI 2006 線段樹之簡單題

description 有乙個n個元素的陣列,每個元素初始均為0。有m條指令,要麼讓其中一段連續序列數字反轉 0變1,1變0 操作1 要麼詢問某個元素的值 操作2 例如當n 20時,10條指令如下 第一行包含兩個整數n,m,表示陣列的長度和指令的條數,以下m行,每行的第乙個數t表示操作的種類。若t ...

CQOI2006 簡單題(真tm簡單!)

題目 有乙個 n 個元素的陣列,每個元素初始均為 0 有 m 條指令,要麼讓其中一段連續序列數字反轉 0 變 1,1 變 0 操作1 要麼詢問某個元素的值 操作2 例如當 n 20 時,10 條指令如下 輸入格式 輸入檔案第一行包含兩個整數 n,m,表示陣列的長度和指令的條數,以下 m 行,每行的第...