원래의 질문에 링크 : 뷰티 값
질문의 의미 : 당신의 하위 간격의 모든 다른 숫자의 합계의 수를 찾을 수 있도록, 당신에게 순서를 제공하는
사고 나 같은 어떤 사람들은 회장 통계 간격 (다른 종류의 수를 계산 처음의 생각을 잘에 .. : 내가) 할 때, 그러나 거기 가고 싶어하지 않습니다 말을하는 방법을 통해 순위에 많은 사람들을보고, 확실히 패턴이 존재합니다.
I 영역이 상이한 회수의 분석에 공헌 범위 간격의 개수를 발견했다. 예를 들어 1,213 견본 우리는 간격 [2,4]를 그 하위 범위에서 두번째 통계적 기여도의 수가 고려 될 때 볼
그 오른쪽에서 동일한 숫자와 연산자 그 좌측 단부의 큰 섹션 기여 (1 다른 부분에 영향을주지 않습니다), 우리는이 게시물은 더 큰 범위를 찾을 것이라고 생각, 예를 들어, [1,4]에 기여 고려되어야 사람.
사실, 우리는 생성 된 값의 좌단 또는 우단 범위 기여로 간주 될 수있다. 우리의 기여를 제조하는 프레스를 고정 가장 왼쪽 (않도록 통계를 반복하지 않음)
즉, 간격 [I + 1, N]의 범위에 기여하는 위치 POS의 값은 (i 발생하는 위치이고, n은 길이이다). 그런 다음 하위 간격의 수를 계산합니다. 따라서, 우리가 계산 한 값을 1,213 기여 표시, 즉 [1,2,4] 번째의 [2,3], [3,4], [3,3]
그래서 우리는 [POS, N]의 우측 엔드 포인트 사이의 [I + 1, POS]에서 브레이크 포인트의 바로 왼쪽을 찾을 수 있습니다. 내가) * (N - - 첨자 I 녹화를 시작하고 1 곳 POS 1) // 왼쪽 엔드 포인트를 0으로 설정 + 그래서 결국 우리는 관계 :( POS를 얻을 수 있습니다
나는이 닭 요리가 너무 간단 추정 ... TAT 자세한 설명이 쓴 넣어 것처럼
암호:
#INCLUDE <. 비트 / stdc ++ H> #DEFINE가 긴 긴 것이다 사용 스페이스 성병; CONST의 INT maxn 1E5 + = 5 ; [maxn] 도착 LL; INT CUR [maxn]; ; ANS LL INT 의 main () { INT의 N; CIN >> N; 위한 ( int로 난 = 1 ; i가 N = <; 내가 ++ ) { CIN >> , 언 [I]; } LL의 L; ANS = 0 ; memset 함수 (현재, 0 , 는 sizeof (현재)); 대한 (int로 I = 1 ; i가 <= N; 내가 ++ ) { ANS + = (LL) (I-CUR [도착 [I]) * (N-I + 1 ); CUR [도착 [I] = I; } COUT << ANS << ENDL; 반환 0 ; }