This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int, int>
const int MAX_N = 1000000;
vector<int> ch[2*MAX_N];
vector<int> tp;
vector<int> sz;
//0 = ?, 1 = min 2 = max
string s;
int parse(int anc, int lt, int t){
if(anc != -1){
ch[anc].push_back(t);
}
sz.push_back(0);
if(s[lt] == '?'){
tp.push_back(0);
sz[t] =1;
return lt+1;
}
else{
if(s[lt+1]== 'i'){
tp.push_back(1);
}
else{
tp.push_back(2);
}
}
int mid =parse(t, lt+4, t+1);
int lid = tp.size();
int last= parse(t, mid+1, tp.size());
sz[t] =sz[t+1] + sz[lid];
/*cout<<t<<" ";
for(int i = lt; i<last+1; i++){
cout<<s[i];
}
cout<<endl;*/
return last+1;
}
pii find_inter(int id){
pii res;
if(tp[id] == 0){
res= {0, 0};
}
else{
pii lh = find_inter(ch[id][0]);
int lid = ch[id][0];
pii rh = find_inter(ch[id][1]);
int rid = ch[id][1];
if(tp[id] ==1){
res = {min(lh.first, rh.first), lh.second+rh.second};
}
else{
res = {lh.first+rh.first+1, sz[id]-1-min(sz[lid]-lh.second-1, sz[rid]-rh.second-1)};
}
}
//cout<<id<<" "<<res.first<<" "<<res.second<<endl;
return res;
}
signed main(){
cin.tie(NULL);
ios_base::sync_with_stdio(false);
cin>>s;
int ended_at =parse(-1, 0,0);
pii res =find_inter(0);
cout<<res.second-res.first+1<<endl;
}
Compilation message (stderr)
Main.cpp: In function 'int main()':
Main.cpp:79:9: warning: unused variable 'ended_at' [-Wunused-variable]
79 | int ended_at =parse(-1, 0,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... |