【模板题】【STL】2729:Blah数集——两个指针的单调队列

2729:Blah数集:以a为基的集合Ba定义如下:(1) a是Ba的第一个元素;(2)如果x在集合Ba中,则2x+1和3x+1也都在集合Ba中;将集合Ba中元素按照升序排列,第N个元素会是多少?

思路:保持两个队列头h1、h2,分别代表产生2h1+1,3*h2+1的点。从两个头结点读取t1和t2,若t1

ps:总是超时,后来逐步排查居然是memset的原因?!求大神告知,为什么加memset会超时啊?

#include
#include
#define MAX 1000010
using namespace std;
int a,n,que[MAX];
void solve()
{
	int h1=1,h2=1,tail=1,t1,t2;
//	memset(que,0,sizeof(que));加这句话居然会TLE?!!?!
	que[1]=a;
	while(tailt2)
		{
			que[++tail]=t2;
			h2++;
		}
		else
		{
			que[++tail]=t1;
			h1++;h2++;
		}
	}
	cout<>a>>n)
		solve();
	return 0;
}

 

优先队列会超时:

 

#include
#include
#include
using namespace std;
int a,n;
struct data
{ int val;
  data(int x){ val=x;}
  bool operator < (const data &a)const
  {	  return val>a.val;  }
};
void solve()
{
	priority_queue Q;
	int count=0,x;
	Q.push(data(a));
	while(count>a>>n)
		solve();
	return 0;
}

 

你可能感兴趣的:(机考刷题)