Blah数集


单调队列解决,第一次提交不知为什么output limit exceede,后来换成long long,把数组开大了一个号就ac了,注意使用位运算,减少运行时间


#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<cstdio>
#include<algorithm>
#include<stack>
using namespace std;
long long que[1000001];
int main(){
long long m,n;
while(scanf("%lld%lld",&m,&n) > 0){
long long h1,h2,tail;
tail = 1;
h1 = 1;
h2 = 1;
que[1] = m;
while(tail < n){
long long t1 = (que[h1]<<1) + 1,t2 = que[h2] * 3 + 1; //之所以用h1,h2是因为比较大的后入队列,因为可能出现后面的2*x + 1 可能小于前面的3*x + 1等诸如此类的情况。
if(t1 < t2){
que[++tail] = t1;
h1 ++;
}else if(t1 > t2){
que[++tail] = t2;
h2++;
}else{
que[++tail] = t2;
h1++;
h2++;
}
}
printf("%lld\n",que[tail]);
}
return 0;
}
05-27 12:59