CCPC 2019ネットワークトライアル

より困難な問題のいくつかの既存のコードについてのAC:

1002年:

#include <ビット/ STDC ++ H> 

名前空間STDを使用して、
#define Fiの第一
の#define SE第二
のconst int型MAXN = 15000000。
const int型N = 110000; 
int型T; 
N INT、M。
INT和[MAXN]、POS、[N]。
構造体ノード
{ 
    int型LL、RR。
} TR [MAXN]。
対<整数、整数> B [N]。
マップ<int型、int型> IDX。
<整数> del_numsを設定します。
<整数>設定::イテレータit。
INT F [N]。
インラインINT lowbit(INT X)
{ 
    戻りX&-x。
} 
INT ROOT1 [N]、root2 [N]、PP [N]。
INTコピー(INT X)
{ 
    ++ POS。
    和[POS] =和[X]。
    TR [POS]の.ll = TR [X]の.ll。
    TR [POS] .rr = TR [X] .rr。
    POSを返します。
}
ボイド追加(int型K、int型のL、R INT、INT X)
{ 
    和[K] ++; 
    (L == R)戻った場合。
    INT半ば=(L + R)/ 2。
    IF(X <= MID)
    { 
        TR [K]の.ll =コピー(T R [K]の.ll)。
        (TR [K]の.ll、L、中、X)を加えます。
    } 
    { 
        TR [K] .rr =コピー(TR [K] .rr)。
        (TR [K] .rr、中間+ 1、R、X)を加えます。
    } 
} 
int型(int型K、int型のL、R INT、INT X)尋ねる
{ 
    IF(和[K] == 0)リターンN + 1と、
    IF(L == R)戻りL。
    INT半ば=(L + R)/ 2。
    IF(L> = X)
    {  
        IF(和[TR [K]の.ll])リターン(TR [K]の.ll、L、中、X)を尋ねます。
        他リターン尋ねる(TR [K] .rr、中間+ 1、R、X)。
    } 
    { 
        int型RES。 
        であれば(MID <X)RES = N + 1。
        他のRES =で頼む(TR [K]の.ll、L、中、X)。
        IF(RES == N + 1)リターン尋ねる(TR [K] .rr、中間+ 1、R、X)。
        他のリターンのres; 
    } 
} 
int型のmain()
{ 
    scanf関数( "%のD"、&T)。
    一方、(T--)
    { 
        scanf関数( "%d個の%のD"、&N、&M)。
        以下のために(INT i = 1; iは++; iが= N <) "%d個"、&[i])とscanf関数を、B [i]は.fi [i]は、B [i]は.SE = I、PPの[し= I] = 0; 
        ソート(B + 1、B + 1個の+ N)。
        逆(B + 1、B + 1 + N)。
        idx.clear(); 
        以下のために(INT i = 1; iが<= N; iは++)
            IDX [I] = I。
        {  
            IF(I> 1件の&& B [I] .fi + 1つの== bの[I-1] .fi)F [B [i]は.SE] = F [B [I-1] .SE]。
            他F [B [i]は.SE] = bの[I] .fi。
        } 
        POS = 0。
        root2 [N + 1] =コピー(0)。
        以下のために(INT I = N; I> = 1; i--)
        { 
            root2 [i]は=コピー(root2 [I + 1])。
            ([I]、1、nは、[I] root2)を加えます。
        } 
        INT lastans = 0。
        del_nums.clear(); 
        del_nums.insert(N + 1)。
        一方、(M--)
        { 
            int型のOP、X、R、K。
            scanf関数( "%のD"、&OP)。
            IF(OP == 1)
            { 
                scanf関数( "%のD"、&x)は、
                X = X ^ lastans。
                IF(!PP [X])
                { 
                    INT TMP = X。
                    PP [X] = 1。
                    del_nums.insert([X])。
                    idx.erase([X])。
                } 
            } 
            { 
                scanf関数( "%dの%のD"、&R&K)。
                R = R ^ lastans。
                K = K ^ lastans。
                IF(!idx.count(K)|| IDX [K]> R)のprintf( "%d個の\ n"、K)、lastans = K。
                { 
                    int型のPOS = IDX [K]。
                    INT X = F [POS]。
                    yはint型。
                    1 +(R == N)、Y = Nであれば、
                    そうでなければ、Y =尋ねる(root2 [R + 1]、1、n、k)は、
                    それはdel_nums.lower_bound(k)を=。
                    int型のz = *それ。
                    lastans =分(X、分(Y-1、Z-1))+ 1。
                    printf( "%d個の\ n"、lastans)。
                } 
            } 
        } 
    } 
        
    0を返します。
}

 1005年:

#include <ビット/ STDC ++ H> 
の#defineは長い長いllの
名前空間stdを使用します。
const int型MAXN = 1E6 + 10。
CONST LL MOD = 1E9 + 7。
CONSTのLL INV2 = 5E8 + 4。
constのLL INV6 = 166666668; 

プライム[MAXN] INT、[MAXN]ファイ。
LL和[MAXN]。
BOOL VIS [MAXN]。
int型CNT = 0; 

INITを無効(){ 
    PHI [1] = 1。
    以下のために(INT I = 2、I <MAXN; iは++){ 
        (!VIS [I])であればプライム[++ CNT] = I、PHI [i]は= I-1 ;; 
        用(INTのJ = 1; iが素数[j]を* && J <= CNT <MAXN; J ++){ 
            VIS [i *が素数[J] = TRUE; 
            IF(I%プライム[j] == 0){ 
                PHI [iが素数* [J] = PHI [I] *プライム[J]。
                ブレーク;
            }
            他のPHI [私は*プライム[J] = PHI [i]は*(プライム[J] -1)。
        } 
    } 
    和[0] = 0。
    以下のために(INT i = 1; iは<MAXN; iは++){ 
        和[I] =(SUM [I-1] + 1LL * i *がPHI [i])と%MOD。
    } 
} 

unordered_map <-1,11,11->融点; 

LL一方(LL n)が{ 
    N%= MOD。
    リターンN *(N + 1)%MOD * INV2の%のMOD。
} 

LL SQU(LL n)が{ 
    N%= MOD。
    リターンN *(N + 1)%MOD *((2 * N + 1)%のMOD)%MOD * INV6の%のMOD。
} 

LL F(LL N){ 
    IF(N <MAXN)戻り和[N]。
    IF(mp.count(N))戻りMP [N]; 
    LL RES = SQU(N)。
    用(LL 1 = 2、R、L <= N; L = R + 1){ 
        R = N /(N / L)。
        LLのTMP =(1(R) -オン(L-1)+ MOD)%MOD。
        RES - = TMP * F(N / L)%MOD。
        IF(RES <0)RES + = MOD。
    } 
    戻りMP [N] =のRES。
} 

int型のmain(){ 
    INIT()。
    int型T; 
    scanf関数( "%のD"、&T)。
    (T--){一方
        LL nは、B。
        scanf関数( "%LLD%LLD%LLD"、&N、&、&B)。
        LLのTMP = F(N)。
        LL ANS =(TMP + 1)* INV2の%のMOD。
        ANS =(ANS-1 + MOD)%のMOD。
        printf( "%LLDする\ n"、(ANS%のMOD + MOD)%のMOD)。
    } 
    0を返します。
}

 

1008年:

#pragma GCCの最適化( "Ofast")
の#include <ビット/ STDC ++。H> 
の#defineがっ長い長
の#define ULL符号なし長い長
の#define Fiの最初
の#define SE第二
の#define MP make_pair 
の#define PII対<-1,11,11-> 
全ての#define(X)x.begin()、x.end()
の#define IO IOS :: sync_with_stdio(偽); cin.tie(0); cout.tie(0)
の#define担当者(II、B )(INT II =用; II <= B; ++ II)
II(あたりの#define、B)(INT II = Bの; II> =; - II)
の#define forn(I、XをI;(INT I = G [X]のために、G、E)は、I = E [I] .next)
の#defineショー(X)COUT <<#1 X << "=" << X << ENDL 
の#define昭和(a、b)はCOUT <<#<< '[' << B << "] =" << [B] << ENDL 
の#define show2(X、Y)COUT <<#1 X <<」= "<< X <<" "<<#1 Y <<" = "<< Y << ENDL
A)担当者(j、0、B)COUT <<#X << '[' << I << ']' << '[' << J << "] =" << X [i]は[J ] <<( "の\ n" [J == B]) の#define showm(X、a、b)は担当者(I、0、a)の担当者(j、0、B)COUT << X [i]は[J ] <<( "の\ n" [J == B])
の#define showa1(X、a、b)は担当者(I、a、b)は昭和(X、I); COUT << ENDL 
の#define showa2(X、 、B)のrep(I、a、b)はCOUT << X [i]は<<」「; COUT << ENDL 
名前空間stdを使用。
CONST int型MAXN = 1E5 + 10、MAXM = 3E5 + 10。
CONST LL INF = 0x3f3f3f3f、MOD = 1E9 + 7。
int型CASN、N、M、K、CNT = 1。<( "の\ n" [J == B]) の#define showa1(X、a、b)は担当者(I、a、b)は昭和(X、I); COUT << ENDL の#define showa2(X、 b)の担当者(I、a、b)はCOUT << X [i]は<<」「; COUT << ENDL 名前空間stdを使用。CONST int型MAXN = 1E5 + 10、MAXM = 3E5 + 10。CONST LL INF = 0x3f3f3f3f、MOD = 1E9 + 7。int型CASN、N、M、K、CNT = 1。<( "の\ n" [J == B]) の#define showa1(X、a、b)は担当者(I、a、b)は昭和(X、I); COUT << ENDL の#define showa2(X、 b)の担当者(I、a、b)はCOUT << X [i]は<<」「; COUT << ENDL 名前空間stdを使用。CONST int型MAXN = 1E5 + 10、MAXM = 3E5 + 10。CONST LL INF = 0x3f3f3f3f、MOD = 1E9 + 7。int型CASN、N、M、K、CNT = 1。
PRIORITY_QUEUE <整数> QUE。
INT {main()の
    IO。
    cinを>> CASN。
    一方、(casn--){ cinを>> CASN。一方、(casn--){ cinを>> CASN。一方、(casn--){
        CIN >> N >> K。
        CNT = 1。
        LL和= K。
        (!que.empty())que.pop()しばらく; 
        担当者(I、1、N){ 
            LLのTMP = 0。
            cinを>> TMP; 
            CNT + = TMP / K。
            合計+ = TMP; 
            IF(TMP%K)que.push(TMPの%のK)。
        } 
        担当者(I、CNT、N-1){ 
            合計+ = k-que.top()。
            que.pop(); 
        } 
        COUT <<和<< ENDL。
    } 
    0を返します。
}

 

おすすめ

転載: www.cnblogs.com/nervendnig/p/11403247.html