File tree 4 files changed +69
-0
lines changed
4 files changed +69
-0
lines changed Original file line number Diff line number Diff line change 59
59
| 02 | | [ Baekjoon-2504 ๊ดํธ์ ๊ฐ] ( ./src/Stack/P2504 ) | |
60
60
| 03 | | [ Baekjoon-3425 ๊ณ ์คํ] ( ./src/Stack/P3425 ) | |
61
61
| 04 | | [ Baekjoon-2493 ํ] ( ./src/Stack/P2493 ) | |
62
+ | 05 | โญ๏ธ | [ Baekjoon-2867 ์์ด์ ๊ฐ] ( ./src/Stack/P2867 ) | |
62
63
63
64
### Queue
64
65
Original file line number Diff line number Diff line change
1
+ package Stack .P2867 ;
2
+
3
+ import java .io .*;
4
+ import java .util .Stack ;
5
+
6
+ public class Main {
7
+
8
+ static int N ;
9
+ static int [] nums ;
10
+
11
+ public static void main (String [] args ) throws Exception {
12
+ System .setIn (new FileInputStream ("src/Stack/P2867/input.txt" ));
13
+ BufferedReader br = new BufferedReader (new InputStreamReader (System .in ));
14
+
15
+ N = Integer .parseInt (br .readLine ());
16
+ nums = new int [N ];
17
+ for (int i = 0 ; i < N ; i ++) nums [i ] = Integer .parseInt (br .readLine ());
18
+
19
+ Stack <Integer > stack = new Stack <>();
20
+
21
+ int [] LM = new int [N ];
22
+ for (int i = 0 ; i < N ; i ++) {
23
+ while (!stack .empty () && (nums [stack .peek ()] <= nums [i ])) stack .pop ();
24
+ LM [i ] = stack .empty () ? 0 : stack .peek () + 1 ;
25
+ stack .push (i );
26
+ }
27
+
28
+ stack .clear ();
29
+ int [] RM = new int [N ];
30
+ for (int i = N -1 ; i >= 0 ; i --) {
31
+ while (!stack .empty () && (nums [stack .peek ()] < nums [i ])) stack .pop ();
32
+ RM [i ] = stack .empty () ? N -1 : stack .peek () - 1 ;
33
+ stack .push (i );
34
+ }
35
+
36
+ stack .clear ();
37
+ int [] lm = new int [N ];
38
+ for (int i = 0 ; i < N ; i ++) {
39
+ while (!stack .empty () && (nums [stack .peek ()] >= nums [i ])) stack .pop ();
40
+ lm [i ] = stack .empty () ? 0 : stack .peek () + 1 ;
41
+ stack .push (i );
42
+ }
43
+
44
+ stack .clear ();
45
+ int [] rm = new int [N ];
46
+ for (int i = N -1 ; i >= 0 ; i --) {
47
+ while (!stack .empty () && (nums [stack .peek ()] > nums [i ])) stack .pop ();
48
+ rm [i ] = stack .empty () ? N -1 : stack .peek () - 1 ;
49
+ stack .push (i );
50
+ }
51
+
52
+ long ans = 0 ;
53
+ for (int i = 0 ; i < N ; i ++) {
54
+ ans += nums [i ] * (long )(i - LM [i ] + 1 ) * (long )(RM [i ] - i + 1 );
55
+ ans -= nums [i ] * (long )(i - lm [i ] + 1 ) * (long )(rm [i ] - i + 1 );
56
+ }
57
+
58
+ System .out .println (ans );
59
+ }
60
+ }
Original file line number Diff line number Diff line change
1
+ ## [ baekjoon-2867] ์์ด์ ๊ฐ
2
+
3
+ ![ image] ( https://user-images.githubusercontent.com/22045163/93620960-cbe10380-fa15-11ea-8e01-6a4ad07d2633.png )
Original file line number Diff line number Diff line change
1
+ 4
2
+ 3
3
+ 1
4
+ 7
5
+ 2
You canโt perform that action at this time.
0 commit comments