[伯俊C++1292楽解答


題名は易しい問題です.

質問する


東昊は来年小学校に入学する.だから東昊のお母さんはまず数学を勉強するために、やりやすい問題を東昊にあげました.
この問題は以下の通りです.1回2回3回このように1 2 2 3 4 4 4 5このような数列を生成し,ある区間を与え,すなわちその区間の和を求める.
しかし、東浩は今、もっと難しい問題を解決するのに忙しいので、東浩を助けましょう.

入力


第1行は、区間の開始および終了を表す整数A,B(1≦A≦B≦1000)を与える.つまり、数列の中で、AからBまで和を求めればいいのです.

しゅつりょく


1行目は区間に属する数値和を出力します.
https://www.acmicpc.net/problem/1292
なかなか解けない
ここでは、区間統合を先に行う必要があるため、どのようなリストを書くかを見てみましょう.
インデックスはアクセスしやすく、一方向挿入のみを行います.
vectorはqueueやdequeよりも効率的です.
#define _CRT_SECURE_NO_WARNINGS 
#include <bits/stdc++.h>

int main(void) {
	int A, B;
	scanf("%d%d", &A, &B);

	int k = 1;
	std::vector<int> seq;
	while (seq.size() < 1000) { //원소갯수가 1000미만일때만
		for (int i = 0; i < k; i++) //정수 k를 k개만큼 넣는다.
			seq.push_back(k); //뒤로넣어야 front부터 오름차순정렬됨
		k += 1;
	}
	int sum = 0;
	for (int i = A-1; i <= B-1; i++) 
		sum += seq[i];
	printf("%d", sum);

	return 0;
}