Tiếng vọng núi cao

Đề bài

Mô tả

Cho một dãy gồm n ngọn núi, độ cao của ngọn núi thứ iai.

Với một đoạn liên tiếp các ngọn núi từ vị trí l đến vị trí r (bao gồm cả hai đầu), tiếng vọng dội lại có độ cao bằng phép OR nhị phân của độ cao tất cả các ngọn núi trong đoạn đó.

Hãy đếm số cặp (l,r) với 1l<rn sao cho tiếng vọng của đoạn [l,r] lớn hơn thực sự độ cao của mọi ngọn núi trong đoạn đó, tức là:

al|al+1||ar>max(al,al+1,,ar).

Ở đây | là phép OR nhị phân theo từng bit.

Dữ liệu vào

  • Dòng đầu chứa số nguyên n, số lượng ngọn núi.
  • Dòng thứ hai chứa n số nguyên a1,a2,,an, độ cao của các ngọn núi.

Dữ liệu ra

  • In ra một số nguyên duy nhất, số cặp (l,r) thỏa mãn điều kiện.

Ràng buộc

  • 1n200000
  • 0ai109

Ví dụ

Input Output Giải thích
5
3 2 1 6 5
8 Các cặp thỏa mãn là (1,4),(1,5),(2,3),(2,4),(2,5),(3,4),(3,5),(4,5). Ví dụ đoạn [2,3]2|1=3>max(2,1)=2.
4
3 3 3 3
0 Với mọi đoạn, phép OR đều bằng 3 và cũng bằng độ cao lớn nhất trong đoạn, nên không có cặp nào thỏa mãn.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0