4 solutions
-
3
利用multiset记录和删除出入库车的价值,利用它可以排序的特点记录最大价值
#include <bits/stdc++.h> using namespace std; int main() { stack <int> s; multiset <int> v; int n; cin>>n; while(n--) { int p,x; cin>>p; switch(p) { case 1:cin>>x; s.push(x); v.insert(x); break; case 2:if(!s.empty()) { //出库时在v中找到并删除相应的价值 v.erase(v.find(s.top())); s.pop(); } break; case 3: !s.empty()?cout<<*(--v.end())<<endl:cout<<"-1"<<endl; //判断车库是否为空,没空就输出-1,空的就输出v的最后一个数字(最大) //*(--v.end())为输出v最后一个数字,可以用迭代器替换 break; } } return 0; }
-
1
把每次放入的车直接更新成栈中的最大值
#include<bits/stdc++.h> using namespace std; const int N=1e6+7; int SS[N],top=-1; int n,k,v,maxx=0; int main() { scanf("%d",&n); while(n--){ scanf("%d",&k); if(k==1){ scanf("%d",&v); if(v>maxx)SS[++top]=v,maxx=v; else SS[++top]=maxx; }else if(k==2){ maxx=SS[--top]; }else{ if(top==-1) printf("%d\n",-1); else printf("%d\n",SS[top]); } } return 0; }
-
0
双栈,另外一个栈贮存最大值
#include<bits/stdc++.h> using namespace std; #define ll long long stack<ll> s; stack<ll> m;\\储存最大值 int main(){ int k,x; ll mm; m.push(0);\\使m.top()一开始就存在 while(scanf("%d",&k)!=EOF){ for(int i=0;i<k;i++){ cin>>x; if(x==1){ ll a; cin>>a; s.push(a); mm=max(a,m.top()); m.push(mm); } else if(x==2){ s.pop(); m.pop(); } else if(x==3){ if(m.top()!=0){ cout<<m.top()<<endl; }else{ cout<<-1<<endl; } } } } }
-
0
水题
#include<bits/stdc++.h> using namespace std; int path[100000]; int t,num,car,i; void search(int []){ int ans=0; for(int j=0;j<i;j++) { if(path[j] > ans) ans = path[j]; } if(ans == 0) cout<<-1<<endl; else cout<<ans<<endl; } int main() { std::ios::sync_with_stdio(false); cin>>t; while(t--){ stack<int> cnt; cin>>num; if(num == 1){ cin>>car; path[i++] = car; cnt.push(car); } else if(num == 2){ cnt.pop(); i--; path[i]=0; } else search(path); } return 0; }
- 1
Information
- ID
- 1528
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 5
- Tags
- # Submissions
- 73
- Accepted
- 23
- Uploaded By