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ứ i là ai.

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 1≤l<r≤n 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

  • 1≤n≤200000
  • 0≤ai≤109

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] có 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.47 awk 1.3.4 gcc 16.2.0 dotnet 10.0.402 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.6 gforth 0.7.3 gfortran 15.3.0 go 1.27.3 groovyc 5.1.3 javac 26.0.2.1 node 26.12.1 julia 1.13.2 kotlinc 2.4.21 lean 4.35.0 sbcl 2.2.9 lua 5.5.1 nim 2.2.12 fpc 3.2.2 fpc-themis 3.2.2 perl 5.42.3 php 8.5.12 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.15.1 racket 8.7 ruby 4.0.8 rustc 1.99.1 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.4.1 tclsh 8.6 bun 1.4.4 deno 2.9.8 v 0.5.2 zig 0.17.0