P1494 [ナショナルチーム]小さなZソックス(オフラインのMoチーム)

トピックへのリンク:https://www.luogu.org/problemnew/show/P1494

オフラインチームのMo

[L、R]区間内:

次のようにそれぞれの靴下の数があると仮定します。A、B、C ...

答えは次のとおりです。(*(a-1)+ B×(B  -  1)+ C *(C  -  1)+ ...)/((R  -  L + 1)*(R  -  L))

単純化は次のとおりです。(*はA + B * B + C * C + ...  - (R  -  L + 1))/((R  -  L + 1)*(R  -  L))

だから我々は尋ねる:((\和A ^ 2) - (RL + 1))/(RL + 1)*(RL)することができます

 

#include <iostreamの> 
する#include <cstdioを> 
する#include <アルゴリズム> 
の#include <CStringの> 
する#include <地図> 
の#include < セット > 
の#include <ベクトル> 
の#include < ストリング > 
の#include <cmath>
 の#define担当者(I 、S、E)がため(I = Sをint型、iは、Eを<; ++ I)
 の#define P対<整数、整数>
 の#define INF 0x3f3f3f3f
 使用 名前空間STD。
typedefの長い 長いLL。
静的 のconst  int型 MAX_N = 5E4 + 5 静的 CONST LLモッド= 1E9 + 7 構造体クエリー{
     int型のL、R、ID、POS。
    ブール 演算子 <(クエリ&Q)のconst {
         場合(POS == q.pos)戻り R < QR。
        リターン POS < q.pos。
    }
} Q [MAX_N]。
構造体回答{
    LLのREV1、REV2。    
} [MAX_N] revは。
INT CNT [MAX_N]、[MAX_N]。
LLのGCD(LLのX、LLのY){
    リターンのy == 0X:GCD(Y、Xの%のY)。
}    
ANS LL;     // このカードはロングロングになり
ボイドアップデート(int型 P、int型V){ - CNT = [[P]] * CNT [[P]];
    CNT [[P]] + = V。 + CNT = [[P]] * CNT [[P]];
}
ボイド)(解決{
     int型N、M。
    scanf関数(" %d個の%のD "、&​​N、&M)。
    INTのブロック=(INT )SQRT(N)
    以下のためにint型 I = 1(のscanf ++ I; iは= N <)" は%d "、&[I])。
    以下のためにint型 = Iを1 ; I <= M; ++ I){
        scanf関数(" %d個の%のD "、&​​Q [i]は.L&Q [I] .R)。
        Q [i]は.ID = iは、
        Q [i]は.POS =(Q [i]が.L - 1)/ブロック+ 1 
    }
    ソート(Q + 1、Q + M + 1 )。
    int型、L = 1、R = 0 以下のためにint型 I = 1 ; I <= M; ++ I){
         場合(Q [i]が.L == Q [I] .R){
            REV [Q [i]は.ID] .rev1 = 0 
            REV [Q [i]は.ID] .rev2 = 1 続け;
        }
        一方、(L <Q [i]が.L)更新(L ++、 - 1 )。
        一方、(L> Q [i]は.L)アップデート( - L、1 )。
        一方、(R <Q [i]は.R)更新(++ R、1 )。
        一方、(R> Q [i]は.R)更新(r--の、 - 1 )。
        INTル= Q [i]は.R - Q [i]が.L + 1 
        REV [Q [i]は.ID] .rev1 =年- 
        REV [Q [i]は.ID] .rev2 =(LL)ル*(ル- 1 )。
        LL GC = GCD(REV [Q [i]は.ID] .rev1、REV [Q [i]は.ID] .rev2)。
        REV [Q [i]は.ID] .rev1 / = GC。
        REV [Q [i]は.ID] .rev2 / = GC。
    }
    以下のためにint型 I = 1(のprintf ++ I; I <= M)" %LLD /%LLD \ n " [I] .rev2、REV [I] .rev1、REV)。
}
INT メイン(){
 //     freopenは( "INPUT.TXT"、 "R"、STDIN)。
//     freopenは( "output.txtと"、 "W"、STDOUT); 
    解決する();
    リターン 0 ;
}
コードの表示

 

おすすめ

転載: www.cnblogs.com/xorxor/p/10927036.html