基本給の線形関数を書くのに長い時間をデバッグします。。
#include <ビット/ STDC ++ H> 使用して 名前空間STDを、 #defineは長い長いっ の#define MAXN 100005 int型M、N。 構造体LB { LLのB [ 35 ]。 INT 検査(LL X){ ため(int型私は= 32、I> = 0 ; i--)であれば(X >> I&1 ){ 場合(!B [i])とリターン 0 。 X ^ = B [i]は、 } を返す 1 。 } ボイドインサート(LL x)から{ 以下のために(int型 = Iを32 ; I> = 0 ; i--)IF(I&X >> 1。){ IF(!{B [I]) B [I] =のX; リターン; } X ^ = Bの[ I]; } } } 基本[MAXN]; ボイドマージ(LB、LB B、LB&Wである){ LB ALL、D; // W [i]はA Couchu BIを表すクロスAB、Dであります塩基、すなわち、各BI Tに対応 するための(int型 I = 0 ;私は<= 32 ; I ++)ALL.b [I] = DB [I] = Abの[I]、 のために(int型 i = 0 ; iは= < 32 ; iは++)場合(BB [I]){ LLのBI = Bbの[i]を、T = 0、フラグ= 0 。 用(int型 J = 32 ; J> = 0 ; j--)場合(BI >> J&1 ){ 場合(!{ALL.b [J]) ALL.b [J] = BI; DB [J] = T。 フラグ = 1。破ります; } BI ^ = ALL.b [J]; T ^ = DB [J]。 } 場合(!フラグ) W.insert(T); } } の#define LSON L、M、RT << 1つ の#define rsonのM + 1、R、RT << 1 | 1 LB SEG [MAXN << 2 ]。 ボイドビルド(int型 L、INT R、INT RT){ 場合(L == R){SEG [RT] = 基地 [L]。返す;} int型の M = L + R >> 1 。 (rson)の構築;(LSON)を構築します。 マージ(SEG [RT << 1 ]、SEG [RT << 1 | 1 ]、SEG [RT])。 } int型のクエリ(int型L、INT R、LLのx、int型の L、INT R、INT RT){ 場合)L <= 1 && R> = R(リターンSEG [RT] .check(X)。 int型の M = L + R >> 1、RESの= 1 ; もし(L <= M)RES&= クエリ(L、R、X、LSON)。 もし(R> M)RES&= クエリ(L、R、X、rson)。 リターンのres; } int型のmain(){ scanf関数(" %D%dの"、&N、&M)。 以下のために(int型私= 1 ; iが<= N; iが++ ){ int型 kは、scanf関数(" %のD "、&K)。 一方、(k-- ){ LLのX; scanf関数(" %のLLD "、&x)は、 もし(!基地[I] .check(x))を ベース[I] .insert(X)。 } } ビルド(1、nは、1 )。 INTのL、R; LL X; 一方、(M-- ){ scanf関数(" %D%D%LLD "、&L&R&X)。 もし(クエリ(L、R、X、1、nは、1))プット(" YES " ); 他のプット(" NO " ); } }