forked from adityabisoi/ds-algo-solutions
-
Notifications
You must be signed in to change notification settings - Fork 0
/
solution.java
137 lines (98 loc) · 2.95 KB
/
solution.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
import java.io.*;
import java.util.*;
public class Solution {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); // size of array
int[] a = new int[n]; // integer array
for (int i = 0; i < a.length; i++) {
a[i] = sc.nextInt();
}
Stk stk1 = new Stk(n); // object creation
int s = 0;
int min = 0;
int max = 0;
min = a[0];
stk1.push(0);
for(int i=1;i<n;i++){ // iterating
if(a[stk1.peep()]<a[i])
{
int m = sum(a[stk1.peep()], a[i]); // sum function call
if(m>max)
max=m;
stk1.push(i);
}
else if(a[stk1.peep()]>a[i]){
while(stk1.peep()!=-99 && a[stk1.peep()]>a[i]){
int m = sum(a[stk1.pop()], a[i]); // sum function call
if(m>max)
max=m;
}
if(stk1.peep()!=-99){
int k = a[stk1.peep()];
int m = sum(k, a[i]); // sum function call
if(m>max)
max=m;
}
stk1.push(i);
}
}
System.out.println(max);
}
// sum function return value after operation
public static int sum(int a , int b)
{
return (((a&b)^(a|b))&(a^b));
}
}
// Stk class
class Stk {
private int[] stkArr = null;
private static int[] stkMaxArr = null;
private static int maxPointer = 0;
private int currentPointer = -1;
private int size = 0;
private int total = 0;
public Stk(int size) { // Stk constructor
super();
this.size = size;
stkArr = new int[size];
}
// push function to insert element
public void push(int x) {
currentPointer++;
stkArr[currentPointer] = x;
total = total + x;
}
// getTotal function for getting total
public int getTotal() {
return total;
}
// pop function to remove element
public int pop() {
int val = stkArr[currentPointer];
stkArr[currentPointer] = 0;
currentPointer--;
total = total - val;
return val;
}
// peep function to return peek
public int peep() {
if (currentPointer > -1)
return stkArr[currentPointer];
else
return -99;
}
// getCurrentPointer function to get Current Pointer
public int getCurrentPointer() {
return currentPointer;
}
// getSize function to get size
public int getSize() {
return size;
}
// getMax function to get maximum
public int getMax() {
return stkMaxArr[maxPointer];
}
}