您的位置:首页 > 产品设计 > UI/UE

1057.Stack (30)...to be continued...

2017-02-27 23:10 323 查看
1057.Stack (30)…to be continued…

pat-al-1057

2017-02-27



分块查找的思想

/**
* pat-al-1057
* 2017-02-27
* Cpp version
* Author: fengLian_s
*/
#include<stdio.h>
#include<stack>
#include<string.h>
#define MAX 100010
#define sqrN 316
using namespace std;
stack<int> st;
int block[sqrN];
int table[MAX];
void Push(int num)
{
st.push(num);
table[num]++;
block[num/sqrN]++;
}
void Pop()
{
int num = st.top();
st.pop();
table[num]--;
block[num/sqrN]--;
printf("%d\n", num);
}
void peekMedian(int k)
{
int sum = 0, index = 0;
while(sum + block[index] < k)
{
sum += block[index++];
}
int num = index * sqrN;
while(sum + table[num] < k)
{
sum += table[num++];
}
printf("%d\n", num);
}
int main()
{
memset(block, 0, sizeof(block));
memset(table, 0, sizeof(table));
freopen("in.txt", "r", stdin);
int n;
scanf("%d", &n);
char cmd[20];
int num;
for(int i = 0;i < n;i++)
{
scanf("%s", cmd);
if(strcmp(cmd, "Push") == 0)
{
scanf("%d", &num);
Push(num);
}
else if(strcmp(cmd, "Pop") == 0)
{
if(st.empty())
printf("Invalid\n");
else
Pop();
}
else//peekMedian
{
if(st.empty())
printf("Invalid\n");
else
{
int k = (st.size() + 1) / 2;
peekMedian(k);
}
}
}
return 0;
}


-TBC-
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: