パリティは、加重互いに素セットをgame--

トピックリンク

質問の意味:

あなたの0と1の、そしてあなたに1内部の部分文字列の数を教えてくれ、との言葉が正しい、とどこ以前の矛盾した言葉をお願いすることを前提とする文字列。

ソリューション:

まず、nは偉大な発見が、問題はかなりの数m、その第1の離散あります

Dは、シーケンスSプレフィックスアレイと表し、
D [L〜R]は、D [L-1]、D [R&LT]同じパリティを有するように1当量の偶数を有する。を

D [L〜R]は、奇数1とD [L-1]、D [R]異なるパリティと等価です。

 

すなわち、同じパリティは、排他的または奇数異なる偶数パリティのXORであるその後、排他的に通過されるか、上記の関係を満たすように

方法と組み合わせることで設定  間違っているどのように多くの回答  に類似

[I、A]及び[I、B]がパリティに[I ^ A-1]限り[B、i]のように決定された存在する場合、D [i]は、Iに1を表し、そして

 

したがって、(実際にはD [i]のにルートノードとみなすことができる共通のポイント互いに素なセットのルートノードを維持Iの距離)

それでは、どのコレクションをマージするには?

FX年度、すなわち向けてみましょう  F [FY] = FXを、    として  D [FX] ^ D [X   ] ^ D [y]は[I] .ans = そう  ^ D [FX] D [X ] ^ D [Y] = [I] .ans

 

コード:

#include <iostreamの> 
する#include <stdio.hに> 
する#include <math.h>の
書式#include <アルゴリズム> 
の#include <ベクトル>
 使用して 名前空間STD。
typedefの長い 長いLL。
const  int型 MAXN = 2E5 + 7 
ベクトル < int型 > V。
INT F [MAXN]、D [MAXN]。
INT GET_ID(INT X){ 戻り LOWER_BOUND(v.begin()、v.end()、x)は-v.begin()+ 1 ;}
 構造体ノード
{ 
    int型のL、R、ANS。
} [MAXN]。
int型(見つけるINT X)
{ 
    場合(F [X] == x)をリターンX。
    INTのルート= 検索(F [X])。
    D [X] ^ = D [F [X]]。
    戻り [X] = F ルート。
} 
int型のmain()
{ 
    int型、N M。
    scanf関数(" %d個の%のD "、&​​N、&M)。
    以下のためにint型私= 1 ; I <= M; iが++ 
    { 
        チャー STR [ 10 ]。
        scanf関数(" %D%D%S "、および[I] .L& [I] .R、STR)。
        v.push_back([I] .L - 1 )。
        v.push_back([I] .R)。
        [I] .ans =(STR [ 0 ] == ' E '01 )。
    } 
    ソート(v.begin()、v.end())、v.erase(ユニーク(v.begin()、v.end())、v.end())。
    int型 iは= 1 [I] = I、Dの[I] = F; I <= v.size()は、i ++)は0 INT RES = M。
    以下のためにint型 I = 1 ; I <= M; iは++ 
    { 
        int型のx = GET_ID([I] .l- 1 )。
        INT Y = GET_ID([I] .R)。
        int型の FX = (x)の検索;
        int型 FY = (y)を見つけます。
        もし(FX == 年度)
        { 
            もし、((D [X] ^ D [Y])!= [I] .ans)
            { 
                RES = I- 1 破ります; 
            } 
        } 
        
        { 
            F [FX] = FY。
            D [FX] ^ = D [X] ^ D [Y] ^ [i]は.ans。///   D [FX] ^ D [X] ^ D [y]は[I] .ans = 
        } 
    } 
    のprintf(" %d個の\ nを" 、RES); 


    戻り 0 ; 
}
コードの表示

 

 

 

 

 

おすすめ

転載: www.cnblogs.com/j666/p/11615302.html
おすすめ