[CQOI 2006]线段树之简单题
生活随笔
收集整理的這篇文章主要介紹了
[CQOI 2006]线段树之简单题
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Description
有一個n個元素的數(shù)組,每個元素初始均為0。有m條指令,要么讓其中一段連續(xù)序列數(shù)字反轉--0變1,1變0(操作1),要么詢問某個元素的值(操作2)。例如當n=20時,10條指令如下:
Input
第一行包含兩個整數(shù)n,m,表示數(shù)組的長度和指令的條數(shù),以下m行,每行的第一個數(shù)t表示操作的種類。若t=1,
則接下來有兩個數(shù)L, R (L<=R),表示區(qū)間[L, R]的每個數(shù)均反轉;若t=2,則接下來只有一個數(shù)I,表示詢問的下
標。1<=n<=100,000,1<=m<=500,000
Output
每個操作2輸出一行(非0即1),表示每次操作2的回答
Sample Input
20 10
1 1 10
2 6
2 12
1 5 12
2 6
2 15
1 6 16
1 11 17
2 12
2 6
Sample Output
1
0
0
0
1
1
這題是個線段樹裸題,只需要維護一個標記即可。0和1的轉變?nèi)绾斡涗?#xff1f;標記++就好,輸出答案只要\(\land\) 1 即可
#include<cmath> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define inf 0x7f7f7f7f using namespace std; typedef long long ll; typedef unsigned int ui; typedef unsigned long long ull; inline int read(){int x=0,f=1;char ch=getchar();for (;ch<'0'||ch>'9';ch=getchar()) if (ch=='-') f=-1;for (;ch>='0'&&ch<='9';ch=getchar()) x=(x<<1)+(x<<3)+ch-'0';return x*f; } inline void print(int x){if (x>=10) print(x/10);putchar(x%10+'0'); } const int N=1e5; struct Segment{#define ls (p<<1)#define rs (p<<1|1)int tree[N*4+10];void pushdown(int p){if (!tree[p]) return;tree[ls]+=tree[p];tree[rs]+=tree[p];tree[p]=0;}void change(int p,int l,int r,int x,int y){if (x<=l&&r<=y){tree[p]++;return;}int mid=(l+r)>>1;if (x<=mid) change(ls,l,mid,x,y);if (y>mid) change(rs,mid+1,r,x,y);}int query(int p,int l,int r,int x){if (l==r) return tree[p];pushdown(p);int mid=(l+r)>>1;return x<=mid?query(ls,l,mid,x):query(rs,mid+1,r,x);} }T; int main(){int n=read(),m=read();for (int i=1;i<=m;i++){int t=read(),x,y;if (t==1) x=read(),y=read(),T.change(1,1,n,x,y);if (t==2) x=read(),printf("%d\n",T.query(1,1,n,x)&1);}return 0; }轉載于:https://www.cnblogs.com/Wolfycz/p/8414571.html
總結
以上是生活随笔為你收集整理的[CQOI 2006]线段树之简单题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么要逃离物理?
- 下一篇: eclipse的下载JDK的安装与配置