#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long int llint; typedef long double lldo; #define mp make_pair #define mt make_tuple #define pub push_back #define puf push_front #define pob pop_back #define pof pop_front #define fir first #define sec second #define res resize #define ins insert #define era erase /* cout<bool mineq(T& a,U b){if(a>b){a=b;return true;}return false;} template bool maxeq(T& a,U b){if(a void SO(T& ve){sort(ve.begin(),ve.end());} template void REV(T& ve){reverse(ve.begin(),ve.end());} templatellint LBI(vector&ar,T in){return lower_bound(ar.begin(),ar.end(),in)-ar.begin();} templatellint UBI(vector&ar,T in){return upper_bound(ar.begin(),ar.end(),in)-ar.begin();} int main(void){ llint ans=0,i,n,bas;cin>>n; vectorie(n); vectorLg(n); vectorRg(n); for(i=0;i>ie[i];} for(i=0;i>Lg[i]>>Rg[i];} //セグメントつりー! static int seg[1048576]={0}; int nko=0; priority_queue,vector>,greater>>que; for(i=0;i0&&que.top().fir1){seg[bas]--;bas/=2;} que.pop(); } bas=(1<<19)+LBI(ie,ie[i]-Lg[i]); while(bas>1){if(bas%2==1){ans-=seg[bas-1];}bas/=2;} ans+=nko;nko++; bas=(1<<19)+i; que.push(mp(ie[i]+Rg[i],i)); while(bas>1){seg[bas]++;bas/=2;} } cout<