시간 제한 :
1000 MS 메모리 제한 : 26만2천1백44킬로바이트 자세한 제한
1 #INCLUDE <. 비트 / stdc ++ H> 2 #DEFINE 버리는 긴 길이 3 #DEFINE IL 인라인 4 #DEFINE RGI 레지스터 LL 5 6 이용한 스페이스 성병; 7 8 CONST의 INT의 각종 = 0x3f3f3f3f ; 9 CONST LL N = 100000 + 10 ; 10 11 LL의 N, m, 단계, ANS 미네소타 = OO; 12 줄게 DEF [N], 공격력 [N], X [N]; 13 LL의 sum_def [N] sum_atk [N] sum_x [N]; (14) (15) (IL)의 판독 LL () 16 { 17 RGI X = 0 , F = 0 , CH; 18 일 동안 를 f | = CH == (isdigit에 (CH = getchar가 ())!) ' - ' ; 19 일 동안 (isdigit에 (CH2)) X = (X << 1 ) + (X << 3 ) + (CH ^ 48 ) = CH getchar가 (); 20 리턴 F? - X : X; 21 } 22 23 INT 주 () 24 { 25 , M =) (읽기, N = ) (판독; 26 대 (RGI I = 1 ; I <= m ++ I) 27 { 28 숯 OP [ 10 ]; 29 LL의 발; 30 는 scanf ( " % S %의 LLD " , OP, 발); 31 일 경우 (OP [ 0 ] == ' ' ) 32 공격력 [++ 공격력 [ 0 ] = 브로; (33) 그 밖의 경우 (OP [ 0 ] == ' D를 ' ) 34 DEF [++ DEF [ 0 ] = 브로; 35 } 36 대 (= I RGI 1 ; 난 = <N; ++ I) 37 X [I]가 = ) (판독; 38 정렬 (ATK + 1 , + 공격력 공격력 [ 0 ] + 1 ); 39 정렬 (DEF + 1 , + DEF DEF [ 0 ] + 1 ); 40 정렬 (X + 1 , X + N + 1 ); 41 대 (RGI I = 1 ; I <= 공격력 [ 0 ] ++ I) 42 sum_atk [I] = sum_atk [I - 1 ] + 공격력 [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 공격력 [공격력 [ 0 ] + 1 ] = OO; 48 대 (RGI I = 1 ; I <= N; ++ I) 49 { 50 동안 (X [I]> = 공격력 [공정]) 51 단계 ++ ; 52 step--; 53 미네소타 = 분 (미네소타 단계 + N - I); 54 } 55 ANS sum_x = [N] - sum_x [N - 미네소타] - sum_atk [미네소타]; 56 의 경우 (미네소타> = 공격력 [ 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 = 최대 (ANS, sum_x [N] - sum_x [N - I] - sum_atk [I]); 71 의 printf ( " %의 LLD " , ANS); 72 반환 0 ; 73 }