Stack (30) |
---|
提交的代码
提交时间:2020-02-02 22:55:27
语言:C++
ACCEPTED
#include <cstdio> #include <stack> #include <cstring> using namespace std; const int MAX = 100001; const int MAXN = 317; int n, block[MAXN] = {0}, table[MAX] = {0}; char order[11]; stack<int> s; bool cmp(int a, int b){ return a < b; } int main(){ scanf("%d", &n); while(n--){ scanf("%s", order); if(strcmp(order, "Pop") == 0){ if(!s.empty()){ int k = s.top(); printf("%d\n", k); s.pop(); block[k/(MAXN-1)]--; table[k]--; }else printf("Invalid\n"); }else if(strcmp(order, "PeekMedian") == 0){ if(s.empty()){ printf("Invalid\n"); continue; } int k, idx = 0, index = 0; if(s.size() % 2 == 0) k = s.size()/2; else k = (s.size()+1)/2; int sum = 0; while(sum + block[idx] < k){ sum += block[idx++]; } index = idx * (MAXN-1); while(sum + table[index] < k){ sum += table[index++]; } printf("%d\n", index); }else{ int k; scanf("%d", &k); s.push(k); table[k]++; block[k/(MAXN-1)]++; } } return 0; } |
恭喜你做对本题!你的代码排在第357位, 快去把思路 分享给大家 吧!
|
扫描二维码,关注牛客网
下载牛客APP,随时随地刷题
扫一扫,把题目装进口袋
扫描二维码,进入QQ群
扫描二维码,关注牛客公众号