您的位置:首页 > 编程语言 > C语言/C++

PAT程序设计考题——甲级1057( stock 分块查询) C++实现

2017-06-22 19:28 726 查看
to PAt 注意这题有5分的点没有通过 实在 查不出错误如果大牛能指出不胜感激

#include<iostream>

#include<math.h>

#include<algorithm>

#include<map>

#include<stack>

#include<string>

#include<vector>

using namespace std;

const int maxn=100001;

const int  j=sqrt(100001);

int table[100010]={0};

int record[j]={0};

int result[100001]={0};

stack<int> s;
int main( )

{

 int m,num=0;

 cin>>m;

 {if(m==0) return 0;

 }

 string in;

 for(int i=0;i<m;i++)

 {

  cin>>in;

  

  if(in.find("Pop")!=-1){

   if(s.empty()){result[num++]=-1;

   }

   else{

   int temp=s.top(); 

   result[num++]=temp;

   table[temp]--;

   record[temp/j]--;

   s.pop();}

   }

   if(in.find("Push")!=-1){

    int qw;

    cin>>qw;

   s.push(qw);

   table[qw]++;

   record[qw/j]++;

  }

            if(in.find("PeekMedian")!=-1){

  int b=(s.size()+1)/2;

  if(s.empty())  result[num++]=-1;

  else{

   int sum,c;

   for( sum=0,c=0;c<=j;c++){

    sum+=record[c];

    if(sum>=b) break;

   }

   sum=sum-record[c];

   for(int i=c*j;i<j*(c+1);i++)

   {

   sum+=table[i];

   if(sum==b){ result[num++]=i;

   break;}//注意这边一定要立刻停止

   }

  }

  } }

  for(int i=0;i<num;i++)

  {

   if(result[i]==-1) printf("Invalid");

   else cout<<result[i];

   if(i<num-1)  printf("\n");

  }

 return 0;

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