時間制限:
1000のミリ秒のメモリ制限: 262144キロバイトの詳細な制限
1つの#include <ビット/ STDC ++ H> 2 の#define llの長い長い 3 の#define ILインライン 4 の#define RGIレジスタLL 5 6 使用して 名前空間STDを、 7 8 のconst int型 OO = 0x3f3f3f3f 。 9 CONST LL N = 100000 + 10 。 10 11 LL N、M、ステップ、ANS、ミネソタ州= OO。 12 っDEF [N]、ATK [N]、X [N]。 13 LLのsum_def [N]、[N]をsum_atk、[N]をSUM_X。 14 15 のIL LLリード() 16 { 17 RGI X = 0、F = 0 、CH。 18 しばらく | F = CH ==(isdigit(CH = getchar関数())!)' - ' ; 19 一方(isdigit(CH))X =(X << 1)+(X << 3)+(CH ^ 48)、CH = GETCHAR()。 20 リターン F?- X:X; 21 } 22 23 のint main()の 24 { 25 、M = read()は、N = )(読み取ります。 26 のために(RGI I = 1 ; I <= M + I) 27 { 28 チャー OP [ 10 ]。 29 LL valを、 30 のscanf(" %sの%のLLD "、OP、およびヴァル)。 31 であれば(OP [ 0 ] == ' A ' ) 32 ATK [++ ATK [ 0 ] = ヴァル。 33 他の 場合(OPが[ 0 ] == ' D ' ) 34 DEF [++ DEF [ 0 ] = ヴァル。 35 } 36 用(RGI I =1 ; I <= N。++ I) 37 X [I] = (読み取り) 38 ソート(ATK + 1、ATK + ATK [ 0 ] + 1 )。 39 ソート(DEF + 1、DEF + DEF [ 0 ] + 1 )。 40 ソート(X + 1、X + N + 1 )。 41 のために(RGI I = 1 ; I <= ATK [ 0 ]; ++ I) 42 sum_atk [I] = sum_atk [I - 1 ] + ATK [I]。 43 のために(RGI I = 1; I <= DEF [ 0 ]。++ I) 44 sum_def [I] = sum_def [I - 1 ] + DEF [I]。 45 のために(RGI I = 1 ; I <= N; ++ I) 46 SUM_X [I] = SUM_X [I - 1 ] + X [i]は、 47 ATK [ATK [ 0 ] + 1 ] = OO。 48 のために(RGI I = 1 ; I <= N; ++ I) 49 { 50 ながら(X [I]> = ATK [ステップ]) 51 ステップ++ 。 52 step--; 53 ミネソタ州=分(ミネソタ州、ステップ+ N - I)。 54 } 55 ANS = SUM_X [N] - SUM_X [N -ミネソタ州] - sum_atk [ミネソタ州]。 56 であれば(ミネソタ州> = ATK [ 0 ] && N> M) 57 { 58 ステップ= 1 。 59 のために(RGI I = 1 ; I <= DEF [ 0 ]; ++ I) 60 { 61 ながら(DEF [I]> = X [ステップ]) 62 ステップ++ 。 63 X [ステップ] = 0 ; 64 } 65 であれば(ステップ<= N - ミネソタ州) 66 のための(RGI i = 1 ; iが<= N -ミネソタ州と、++ I) 67の ANS + = X [i]は、 68 } 69 用(RGI I = 1 ; I <ミネソタ州; ++ I) 70の ANS = MAX(ANS、SUM_X [N] - SUM_X [N - 1] - sum_atk [I])。 71 のprintf(" %のLLD " 、ANS)。 72 リターン 0 ; 73 }