水。區間修改,單點查詢。用線段樹維護區間\([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 行,每行的第...