이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
using namespace std;
struct sommet {
int val,pere;
vector<pair<int,int>> fils;
unordered_map<int,int> valAre;
};
const int MAX_SOM=300*1000+5;
sommet arbre[MAX_SOM];
int nbOp,nbSom,nouv,pos,suiv,posMeil,trouve;
vector<pair<int,int>> effacer(vector<pair<int,int>> v,pair<int,int> p) {
vector<pair<int,int>> r;
for (auto i:v) {
if (i!=p) {
r.push_back(i);
}
}
return r;
}
signed main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin>>nbOp;
for (int iop=0;iop<nbOp;iop++) {
cin>>nouv;
if (nouv>0) {
nbSom++;
arbre[nbSom].val=nouv;
arbre[nbSom].pere=pos;
arbre[pos].valAre[nbSom]=0;
arbre[pos].fils.push_back({0,nbSom});
pos=nbSom;
}
else {
nouv*=-1;
trouve=0;
for (int i=(int)arbre[pos].fils.size()-1;i>=0;i--) {
if (trouve==0 and arbre[pos].fils[i].first<nouv) {
trouve=1;
suiv=arbre[pos].fils[i].second;
arbre[pos].fils=effacer(arbre[pos].fils,{arbre[pos].valAre[suiv],suiv});
arbre[pos].valAre[suiv]=nouv;
arbre[pos].fils.push_back({arbre[pos].valAre[suiv],suiv});
pos=suiv;
}
}
if (trouve==0) {
suiv=arbre[pos].pere;
arbre[suiv].fils=effacer(arbre[suiv].fils,{arbre[suiv].valAre[pos],pos});
arbre[suiv].valAre[pos]=nouv;
arbre[suiv].fils.push_back({arbre[suiv].valAre[pos],pos});
pos=suiv;
}
}
cout<<arbre[pos].val<<"\n";
}
/*for (int i=0;i<=nbSom;i++) {
cout<<i<<" "<<arbre[i].val<<" "<<arbre[i].pere<<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... |