PKU 2081 Recaman's Sequence

  • Twitter上で@tozangezanさんがつぶやいていた問題
  • サイズが500000なのでO(N log N)のアルゴリズムまでなら通る可能性が高い
  • この回答では最初に500000まで求めてから、最後に入力を処理している
#include <iostream>
#include <set>

using namespace std;

static int a[500000 + 10];
int main() {
	set<int> used;
	for (int m = 0; m <= 500000; ++m) {
		if (a[m - 1] - m > 0 && !used.count(a[m - 1] - m)) {
			a[m] = a[m - 1] - m;
		} else {
			a[m] = a[m - 1] + m;
		}
		used.insert(a[m]);
	}

	for (int k; cin >> k && k != -1; ) {
		cout << a[k] << endl;
	}
}