#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define popcount __builtin_popcount using namespace std; using namespace atcoder; typedef long long ll; typedef pair P; using mint=modint1000000007; using ull=unsigned long long; template struct LazySegmentTree{ using F=function; using G=function; using H=function; int sz; vector data; vector lazy; const F f; const G g; const H h; const Monoid e1; const OperatorMonoid e0; LazySegmentTree(int n, const F f, const G g, const H h, const Monoid &e1, const OperatorMonoid &e0): f(f), g(g), h(h), e1(e1), e0(e0){ sz=1; while(sz v){ for(int i=0; i=0; i--) data[i]=f(data[2*i+1], data[2*i+2]); } void eval(int k, int l, int r){ if(lazy[k]!=e0){ data[k]=g(data[k], lazy[k], r-l); if(k vs[400040]; bool sorted[400040]; int main() { cin>>n; for(int i=0; i>a[i]; } for(int i=0; i>b[i]; } fill(pra, pra+400040, -1); fill(prb, prb+400040, -1); ll ans=0; // for(int i=0; i seg(n, f, g, h, P(0, 0), 0); vector

v0(n, P(0, 1)); seg.build(v0); int l1, r1; for(int i=0; i