- アーチェリートーナメントダイナミック処方箋+ vecotor不滅のタイトル

預金や預金図の長方形のように、各ノード地区レベル内に格納されているラウンドの数字は、その後、暴力の裁判官は、しかし私は、この考えを持つようになりました。このTMは行くことができます。それについて考え、あなたが形而上学の時間複雑性は証明できないオーバーできるようになります。

#include <iostreamの> 
する#include < 文字列・H> 
の#include <アルゴリズム> 
する#include <stdio.hに> 
する#include < 設定 > 
の#include <ベクトル>
 の#defineが長い長いLL
 使用 名前空間STD。
const  int型 MAXX = 2E5 + 6 
ベクトル < 整数 > V [MAXX * 20 ]。
int型XX [MAXX]。
int型YY [MAXX]。
構造体ノード
{ 
    int型のL、R。
}ツリー[MAXX * 20 ]。
int型CNT;
int型ANS;
ブールチェック(int型 ×1、INT Y1、int型 ×2、INT Y2)
{ 
    リターン 1LLの*(X1-X2)*(X1-X2)+ 1LL *(Y1-Y2)*(Y1-Y2)<1LL * Y1の*のY1 ; 
} 
ボイド buildtree(INT&RT、int型の L、int型の R、int型の L、INT R、int型のID)
{ 
    場合(!RT)
    { 
        CNT ++ 
        RT = CNT; 
    } 
    場合(L <= 1 && R <= R)
    {
        V [RT] .push_back(ID)。
        返します
    } 
    INT半ば=(L + R)>> 1 もし(L <= MID)
    { 
        buildtree(ツリー[RT] .L、L、中、L、R、ID)。
    } 
    もし(R> MID)
    { 
        buildtree(ツリー[RT] .R、中間 + 1 、R、L、R、ID)。
    } 
} 
ボイドクエリ(INT RT、INT L、のint R、int型のx、int型Y)
{ 
    場合(!RT)のリターン;
    (オートこれ:V [RT])
    { 
        もし、((XX [それ]、YY [それ]、x、y)をチェック)
        { 
            ANS = こと。
            返します
        } 
    } 
    場合(L == r)は
    { 
        返します
    } 
    INT半ば=(L + R)>> 1 もし(x <= MID)
    { 
        クエリ(ツリー[RT] .L、L、中、X、Y)
    } 
    
    { 
        クエリ(ツリー[RT] .R、中間 + 1 、R、X、Y)。
    } 
} 
ボイド更新(int型 RT、int型の L、INTR、INT UL、int型 UR、INT ID)
{ 
    場合(UL> UR)のリターン;
    もし(UL <= 1 && R <= UR)
    { 
        ベクトル < INT > TMP。
        (オートこれ:V [RT])
        { 
            場合(!それ= ID)
            { 
                tmp.push_back(IT)。
            } 
        } 
        V [RT] = TMPと、
        返します
    } 
    INT半ば=(L + R)>> 1 もし(UL <=MID)
    { 
        更新(ツリー[RT] .L、L、中間、UL、UR、ID)。
    } 
    であれば(UR> MID)
    { 
        更新(ツリー[RT] .R、中間 + 1 、R、UL、UR、ID)。
    } 
} 
int型のmain()
{ 
    int型のT、OP。
    int型の室温;
    一方、(〜のscanf(" %dの"、&T))
    { 
        CNT = 0 
        RT = 0 ;
        int型 iは= 1、I <= T; I ++は
        { 
            scanf関数(" %D%D%D "、&​​OP&XX [i]は、&YY [I])。
            もし(OPの== 1 
            { 
                buildtree(RT、 -1e9,1e9、XX [I] -YY [I]、XX [I] + YY [i]は、I)。
            } 
            
            { 
                ANS = - 1 
                クエリ(RT、 - 1e9,1e9、XX [i]は、YY [I])。
                printf(" %d個の\ n " 、ANS)。
                もし - (!ANS = 1 
                { 
                    更新(RT-1e9,1e9 XX [年] -YY [年] XX [年] + YY [年]歳)。
                } 
            } 
        } 
    } 
    戻り 0 
}

 

おすすめ

転載: www.cnblogs.com/bluefly-hrbust/p/11622242.html