만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

테스트 준비

시간 제한2초메모리 제한512 MB

요약
배열의 연속 부분 배열 중, 각 테스트가 개수 m과 m개의 간선으로 이루어진 숲이 되도록 나눌 수 있는 것의 개수를 구합니다.
난이도

어려움10점 중 8점

유형
동적 계획법, 유니온 파인드, 투 포인터
정답자
아직 제출이 없습니다

문제

닉은 프로그래밍 대회에 낼 문제를 준비하고 있다. 대회가 임박했지만 아직 테스트를 만들지 못했다. 테스트 생성을 간단히 하려고 멀티테스트 방식을 쓰기로 했다. 입력 하나에는 테스트가 하나 이상 들어 있고, 각 테스트는 앞 테스트 바로 뒤에 이어 붙는다.

각 테스트는 정수 mm로 시작하고, 이어서 정수 쌍 ai,bia_i, b_i가 mm개 나온다. 각 쌍은 무방향 그래프의 간선을 나타낸다. 정점은 0번부터 번호가 매겨지며 번호의 상한은 없다. 한 테스트의 그래프에는 루프나 다중 간선이 없어야 하고, 사이클이 없는 포레스트여야 한다.

닉은 다른 문제에서 쓰던 음이 아닌 정수 배열을 이번 문제에도 쓰기로 했다. 닉은 이 배열의 부분 배열을 골라 테스트로 사용한다. 배열의 서로 다른 부분 배열 중 이 문제의 올바른 입력이 되는 것의 개수를 구하라. 두 부분 배열은 시작 인덱스나 끝 인덱스 중 하나라도 다르면 서로 다르다.

입력

첫 줄에 배열의 원소 개수 nn이 주어진다 (1≤n≤500 0001 \le n \le 500\,000). 둘째 줄에는 배열의 원소 aia_i가 nn개 주어진다 (0≤ai≤1090 \le a_i \le 10^9).

출력

올바른 입력이 되는 서로 다른 부분 배열의 개수를 한 줄에 출력한다.

힌트

첫 번째 예시에서 올바른 입력이 되는 부분 배열은 대괄호로 표시한 [2 1 3 4 1]과 2 [1 3 4] 1이다.

두 번째 예시에서는 [1 3 1] 2 2 0 2 3, 1 [3 1 2 2 0 2 3], 1 3 1 [2 2 0 2 3], 1 3 1 2 2 [0] 2 3, [1 3 1 2 2 0 2 3]이 올바른 입력이다.

예제2

  1. 예제 1

    입력
    5
    2 1 3 4 1
    
    예상 출력
    2
    
  2. 예제 2

    입력
    8
    1 3 1 2 2 0 2 3
    
    예상 출력
    5