1. 程式人生 > >【樹狀陣列】【CQOI2006】簡單題

【樹狀陣列】【CQOI2006】簡單題

【題目描述】

        有一個n個元素的陣列,每個元素初始均為0。有m條指令,要麼讓其中一段連續序列數字反轉——0變1,1變0(操作1),要麼詢問某個元素的值(操作2)。例如當n=20時,10條指令如下:

【輸入格式】

    第一行包含兩個整數n,m,表示陣列的長度和指令的條數,以下m行,每行的第一個數t表示操作的種類。若t=1,則接下來有兩個數L, R (L<=R),表示區間[L, R]的每個數均反轉;若t=2,則接下來只有一個數I,表示詢問的下標。

【輸出格式】

    每個操作2輸出一行(非0即1),表示每次操作2的回答

【樣例輸入】

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

【樣例輸出】

1
0
0
0
1

1

【提示】

50%的資料滿足:1<=n<=1,000,1<=m<=10,000

100%的資料滿足:1<=n<=100,000,1<=m<=500,000

水題,無需線段樹,樹狀陣列即可。

#include<iostream>
#include<iomanip>
#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map>
using namespace std;
int tree[400005],n,m;
int lowbit(int k)
{
	return k&-k;
}
int sum(int x)
{
	int ans=0;
	while(x>0)
	{
		ans+=tree[x];
		x-=lowbit(x);
	}
	return ans;
}
void add(int x,int k)
{
	while(x<=n)
	{
		tree[x]+=k;
		x+=lowbit(x);
	}
}
int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++)
	{
		int t;
		scanf("%d",&t);
		if(t==1)
		{
			int x,y;
			scanf("%d%d",&x,&y);
			add(x,1);
			add(y+1,-1);
		}
		else
		{
			int x;
			scanf("%d",&x);
			printf("%d\n",sum(x)%2);
		}
	}
}

相關推薦

陣列CQOI2006簡單

【題目描述】         有一個n個元素的陣列,每個元素初始均為0。有m條指令,要麼讓其中一段連續序列數字反轉——0變1,1變0(操作1),要麼詢問某個元素的值(操作2)。例如當n=20時,10條指令如下: 【輸入格式】     第一行包含兩個整數n,m

11.2校內測試矩陣字首和陣列逆序對(題意轉換)

Solution 簽到水題,直接狀壓列舉所有情況算出答案即可。 Code #include<bits/stdc++.h> #define LL long long using namespace std; inline LL read() { LL x =

區間偶數異或和離線陣列字首和前驅思想

【連結】 http://hznu.club/OJ/problem.php?cid=1227&pid=2 【題意】 求區間出現偶數次的數的異或和 【思路】 首先,沒有修改,可以離線查詢,減少複雜度。 其次,我們容易知道的是:區間出現奇數次的數的異或和,即為區間異或和。

動態主席ZOJ 2112陣列+主席

題意:       給定一個區間,求這個區間第k小的數,支援單點修改。   思路:       動態主席樹裸題。       我們先來回顧一下靜態主席樹的做法,對於陣列中每一個位置

DNA Evolution CodeForces - 828E(827C)陣列

題目連結   很難的一道題吧,算是挺難了,就是想到挺複雜,作為我這麼個Ju蒻來說。   題目給你一串字串,是初始的字串,然後告訴你一系列操作,問你: (一)、改變點Xi上的字元; (二)、查詢【l,r】區間上的對應與新給的字串匹配的個數是幾個?例如“ACGTC

codeforce828E. DNA Evolution陣列統計貢獻

文章目錄 題目連結: 題目連結: http://codeforces.com/problemset/problem/828/E 題意:先給一個DNA序列,然後有兩種操作 操作1:把 x 位置的鹼基改成 c 操作2:給一個 L 和一個 R ,以及

BZOJ3155/LNSYOJ96 preprefix陣列x2報告

這道題是樹狀陣列+數學題,然而我數學並不好 題目描述 對於一個長度為nn的序列a1,a2,a3……ana1,a2,a3……an,其字首和(Prefix Sum)SiSi為前ii個元素的和,即∑k=1iai∑k=1iai。而字首和的字首和(Preprefix Sum)就是把字首和序列S1,S2,S3……Sn

LNSYOJ203最大值陣列應用報告+陣列深刻理解

這道題是一個典型的樹狀陣列查詢有幾個比某個數大/小的數的應用 題目描述    給定NN個區間,選定一個固定整數值TT,對於一個區間[ai,bi][ai,bi]. 如果T<aiT<ai,那麼T在這個區間的得分為X, 如果T>biT>bi,那麼T在這個區間的得分為Z, 如果ai≤

REQ CodeForces - 594D陣列+離線查詢+區間思維

題目連結   很好的一道題,昨晚上推的,今天由於程式碼能力太弱敲了半天,再不斷的找到自己思維的BUG,於是RE了一發、T了一發、WA了一發,就Ac了,還不錯,那我們來講解一下題目的思路。   我們知道對於一個值的尤拉函式值,就是它的值去乘上它所有的質數-1除以質數:如

歷屆試題 小朋友排隊陣列

  歷屆試題 小朋友排隊   時間限制:1.0s   記憶體限制:256.0MB 問題描述   n 個小朋友站成一排。現在要把他們按身高從低到高的順序排列,但是每次只能交換位置相鄰的兩個小朋友。   每個小朋友都有一個不高興的程度。開始的時候,所有小朋友的不高興程度

CHOJ 4201 樓蘭圖騰陣列

描述 在完成了分配任務之後,西部314來到了樓蘭古城的西部。相傳很久以前這片土地上(比樓蘭古城還早)生活著兩個部落,一個部落崇拜尖刀(‘V’),一個部落崇拜鐵鍬(‘∧’),他們分別用V和∧的形狀來代表各自部落的圖騰。 西部314在樓蘭古城的下面發現了一幅巨大的壁畫,壁畫上被

2016 大連區域賽 現場賽 E—Aninteresting game陣列

Aninteresting game Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 120    Acce

BZOJ P1103 「POI2007」大都市megdfs序陣列+差分

#include <queue> #include <cmath> #include <cstdio> #include <cstring> #include <iostream> #include &

hdu 1166 敵兵佈陣單點更新 區間查詢陣列

敵兵佈陣 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 126415    Accepted Submissi

1082 線段練習 3區間更新 區間查詢陣列

題目描述 Description 給你N個數,有兩種操作: 1:給區間[a,b]的所有數增加X 2:詢問區間[a,b]的數的和。 輸入描述 Input Description 第一行一個正整數n,接下來n行n個整數, 再接下來一個正整數Q,每行表示操作的個數,

HDU 5592 ZYB's Game 陣列+二分

<題目連結> 題目大意: 給你一個由1~n,n個數組成的序列,給出他們每個的字首逆序數,現在要求輸出這個序列。 解題分析: 由字首逆序數很容易能夠得到每個數的逆序數。假設當前數是i,它前面比它小的數為a[i]( i - 1 - i的逆序數即可),我們不難知道,i在前i個數中是第i+1大的。

修改序列陣列區修單查模板

傳送門:http://oi.cdshishi.net:8000/problempage.php?problem_id=2138 水題++上程式碼 #include<bits/stdc++.h> #define in read() using namespace std; in

清點人數陣列單修字首和模板

題目傳送門:http://oi.cdshishi.net:8000/problempage.php?problem_id=3860 太水了,,,比模板還水,,模板好歹要帶一個r-(l-1),這個直接查字首和,,太水了 #include<bits/stdc++.h> #defi

最大數JSOI2008陣列

傳送門:https://www.luogu.org/problemnew/show/P1198 一道變式樹狀陣列 區別是從末尾開始建點 其他操作沒有變 差不多就是這樣,,很水的一道題 上程式碼 #include<bits/stdc++.h> #define i

hdu 1556 Color the ball 陣列

Time limit 3000 ms Memory limit 32768 kB OS Windows Source N個氣球排成一排,從左到右依次編號為1,2,3....N.每次給定2個整數a b(a <= b),lele便為騎上他的“小飛鴿"牌