Pagini recente » Cod sursa (job #2739959) | Cod sursa (job #341238) | Cod sursa (job #2286993) | Cod sursa (job #1171890) | Cod sursa (job #3159152)
#include <bits/stdc++.h>
using namespace std;
ifstream f("emm.in");
ofstream g("emm.out");
char s[100005];
int st[100005];
/**
( = -1
m = -2
M = -3
(50 -2 6) -3 80 -2 55
-1 5 0 -2 6
6 -3 80 -2 55
*/
void Solve()
{
int top, val, i, j, p, x;
char ch;
top = 0;
val = -1;
for(i = 0; s[i] != 0; i++)
{
ch = s[i];
if(ch == '(')
{
/// am pus paranteza deschisa in stiva
st[++top] = -1;
}
/**
5213m45
*/
else if(ch == 'm'){
if(val >= 0){
st[++top] = val;
val = -1;
}
/// am pus m in stiva
st[++top] = -2;
}
/**
5213M45
*/
else if(ch == 'M'){
if(val >= 0){
st[++top] = val;
val = -1;
}
/// am pus M in stiva
st[++top] = -3;
}
/**
5213
pt 5: val = 5
pt 2: val = 5*10 + 2
pt 1: val = 52*10 + 1
pt 3: val = 521*10 +3
*/
else if(ch >= '0' && ch <= '9'){
if(val == -1)
val = (ch - '0');
else
val = val * 10 + (ch - '0');
}
/**
paranteza inchisa
(50 -2 6)
-1 50 -2 6
*/
else{
if(val >= 0){
st[++top] = val;
val = -1;
}
///merg inapoi pana la paranteza deschisa -1
/**
j = top;
while(st[j] != -1){
j--;
}
*/
for(j = top; st[j] != -1; j--)
;
///evaluam expresia
///-1 50 -2 6 -3 8
/**
-1 50 -2 6 -3 8
x = 50
x = 6
x = 8
-1 50 -2 6 -3 8 => 8
*/
x = st[j + 1];
for(p = j + 3; p <= top; p += 2){
if(st[p - 1] == -2)
x = min(x, st[p]);
else x = max(x, st[p]);
}
top = j;
st[top] = x;
}
}
///5m8M60m4M85
///5 -2 8 -3 60 -2 4 -3
if(val >= 0){
st[++top] = val;
val = -1;
}
///evaluam expresia
x = st[1];
for(p = 3; p <= top; p += 2){
if(st[p - 1] == -2)
x = min(x, st[p]);
else x = max(x, st[p]);
}
g << x << "\n";
}
int main()
{
f >> s;
Solve();
return 0;
}