#include #define rep(i,n) for(int i=0;i<(n);i++) using namespace std; using lint=long long; template T gcd(const T& a,const T& b){ return b==0?a:gcd(b,a%b); } template class sparse_table{ vector> st; vector h; public: sparse_table(const vector& a){ int n=a.size(); h.assign(n+1,0); for(int i=2;i<=n;i++) h[i]=h[i>>1]+1; st.resize(h[n]+1); st[0]=a; for(int i=1;i a(n); rep(i,n) scanf("%lld",&a[i]); sparse_table ST(a); lint ans=0; rep(i,n) if(ST.query(i,n)==1) { if(a[i]==1){ ans+=n-i; continue; } int lo=i+1,hi=n; while(hi-lo>1){ int mi=(lo+hi)/2; if(ST.query(i,mi)==1) hi=mi; else lo=mi; } ans+=n-hi+1; } printf("%lld\n",ans); return 0; }