問題のLOJ P10117、単純な問題の解決策

デイリー質問day15パンチ

分析

フェンウィックツリー

それが偶数である場合、各文字の変更に回数を維持するために、フェンウィックツリーは1が奇数で、0であります

書式#include <iostreamの> 
の#include <cstdioを> 
する#include <CStringの> 
の#include <アルゴリズム> 
に#define int型はlong long 
の#define MAXN 100000 + 10 
std名前空間を使用しました。
インラインint型リード()
{ 
    int型のx = 0。
    BOOL F = 1。
    チャーC = GETCHAR()。
    用(;!isdigit(C)と、c = getchar関数())の場合(C == ' - ')は、f = 0; 
    用(; isdigit(C); C = GETCHAR())x =(x << 3)+(X << 1)+ C-'0' 。
    IF(f)に戻り、X。
    0-Xを返します。
} 
インラインボイドライト(int型X)
{ 
    IF(X <0){のputchar( ' - ')であり、x = -x;} 
    もし(X> 9)書き込み(X / 10)。
    putchar(Xの10%+ '0')。
}は
N INT、M。
int型のツリー[MAXN]。
	NUM&-numを返します。
} 
インラインボイドビルド(INT S、INT NUM)
{ 
	ための式(I = Sをint型、I + = lowbit(I); iが<= N)木[I] + = NUM。
} 
インラインINTは(INT s)を尋ねる
{ 
	INT ANS = 0。
	(I = sのint型; I> = 1; I- = lowbit(I))のためのANS + =ツリー[I]。
	ANSを返します。
} 
)(主符号付き
{ 
	read()はN =であり; m =読み取ります()。
	以下のために(iは++; I <= M I = 1 INT)
	{ 
		()=のintを読み取ります。
/ * 
		ため(; iがn = <; I = 1 int型私は++)
		{ 
			int型ティム=(i)を尋ねます。
			IF(ティム== 0)書き込み(0)。
			それ以外の場合(ティム%2 == 0)の書き込み(0); 
			それ以外の場合(ティム%2 == 1)、ライト(1); 
			裁判所未満<<」「; 
		} 
		COUT << ENDL。
* /
		(== 1)であれば
		{ 
			(読み取らINT 1 =)、R =リード()。
			(L 1)を構築します。
			(R + 1、-1)を構築します。
		} 
		IF(== 2)
		{ 
			int型のx =リード()。
			INTティム=(x)を尋ねます。
			IF(ティム%2 == 0)書き込み(0)。
			それ以外の場合(ティム%2 == 1)、ライト(1); 
			printf( "\ n")を。
		} 
	} 
	0を返します。
}

論文をギャングしてください(とにかく、私はそれが論文を何を意味するのか知りません)

おすすめ

転載: www.cnblogs.com/handsome-zyc/p/11544575.html