#include <bits/stdc++.h>
using namespace std;
const int maxn=2*1e6+5;
string s;
int a[maxn];
vector<int> v[maxn];
int num=0,g;
void build()
{
stack<int> h;
for(int i=0;i<s.size();i++)
{
int tp=0;
if(s[i]=='m')
{
if(s[i+1]=='i')a[++num]=-1;
else a[++num]=1;
if(h.size())
v[h.top()].push_back(num);
h.push(num);
}
if(s[i]==')')
h.pop();
if(s[i]=='?')
{
num++;
g++;
v[h.top()].push_back(num);
}
}
/*for(int i=1;i<=num;i++)
{
cout<<i<<":: ";
for(auto j:v[i])
cout<<j<<" ";
cout<<endl;
}*/
}
int cnt[maxn];
int l[maxn],r[maxn];
void dfs(int i)
{
for(auto j:v[i])
{
dfs(j);
cnt[i]+=cnt[j];
}
if(v[i].size())
{
int v1=v[i][0];
int v2=v[i][1];
if(a[i]==1)
{
l[i]=l[v1]+l[v2];
r[i]=cnt[v1]+cnt[v2]-min(cnt[v1]-r[v1],cnt[v2]-r[v2]);
}
else
{
l[i]=min(l[v1],l[v2]);
r[i]=r[v1]+r[v2]-1;
}
}
else
{
cnt[i]=1;
l[i]=1;
r[i]=1;
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin>>s;
build();
dfs(1);
cout<<r[1]-l[1]+1<<endl;
return 0;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |