Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<cstdio>
- #include<vector>
- #include<cstring>
- #include<queue>
- #include<map>
- #include<set>
- #include<algorithm>
- #include<stack>
- #include<cmath>
- #include<iomanip>
- #include<cstdlib>
- #include<sstream>
- #include<climits>
- using namespace std;
- #define f(i,a,b) for(i=a;i<b;i++)
- #define rep(i,n) f(i,0,n)
- #define pb push_back
- #define ss second
- #define ff first
- #define vi vector<int>
- #define vl vector<ll>
- #define s(n) scanf("%d",&n)
- #define ll long long
- #define mp make_pair
- #define PII pair <int ,int >
- #define PLL pair<ll,ll>
- #define inf 1000*1000*1000+5
- #define v(a,size,value) vi a(size,value)
- #define sz(a) a.size()
- #define all(a) a.begin(),a.end()
- #define tri pair < int , PII >
- #define TRI(a,b,c) mp(a,mp(b,c))
- #define xx ff
- #define yy ss.ff
- #define zz ss.ss
- #define in(n) n = inp()
- #define vii vector < PII >
- #define vll vector< PLL >
- #define viii vector < tri >
- #define vs vector<string>
- #define DREP(a) sort(all(a)); a.erase(unique(all(a)),a.end());
- #define INDEX(arr,ind) (lower_bound(all(arr),ind)-arr.begin())
- #define ok if(debug)
- #define trace1(x) ok cerr << #x << ": " << x << endl;
- #define trace2(x, y) ok cerr << #x << ": " << x << " | " << #y << ": " << y << endl;
- #define trace3(x, y, z) ok cerr << #x << ": " << x << " | " << #y << ": " << y << " | " << #z << ": " << z << endl;
- #define trace4(a, b, c, d) ok cerr << #a << ": " << a << " | " << #b << ": " << b << " | " << #c << ": " << c << " | " \
- << #d << ": " << d << endl;
- #define trace5(a, b, c, d, e) ok cerr << #a << ": " << a << " | " << #b << ": " << b << " | " << #c << ": " << c << " | " \
- << #d << ": " << d << " | " << #e << ": " << e << endl;
- #define trace6(a, b, c, d, e, f) ok cerr << #a << ": " << a << " | " << #b << ": " << b << " | " << #c << ": " << c << " | " \
- << #d << ": " << d << " | " << #e << ": " << e << " | " << #f << ": " << f << endl;
- ll MOD = int(1e9) + 7;
- #define gc getchar()
- inline int inp(){register int n=0,s=1,c=gc;if(c=='-')s=-1;while(c<48)c=gc;while(c>47)n=(n<<3)+(n<<1)+c-'0',c = gc;return n*s;}
- #define pc(x) putchar(x) //_unlocked(x);
- inline void writeInt (ll n)
- {ll N = n, rev, count = 0;rev = N; if (N == 0) { pc('0'); pc('\n'); return ;}
- while ((rev % 10) == 0) { count++; rev /= 10;}rev = 0; while (N != 0) { rev = (rev<<3) + (rev<<1) + N % 10; N /= 10;}
- while (rev != 0) { pc(rev % 10 + '0'); rev /= 10;}while (count--) pc('0'); }
- const int N = 1000*100+5;
- int debug = 1;
- int a[N],b[N],c[N];
- int main()
- {
- // ios::sync_with_stdio(false);
- int i,j,t;
- // cin>>t;
- s(t);
- while(t--)
- {
- memset(a,0,sizeof(a));
- memset(b,0,sizeof(b));
- memset(c,0,sizeof(c));
- int p,q,r;
- s(p);
- rep(i,p)
- s(a[i+1]);
- s(q);
- rep(i,q)
- s(b[i+1]);
- s(r);
- rep(i,r)
- s(c[i+1]);
- ll ans = 0;
- for( i = 1; i <= q; i++)
- {
- int num = b[i];
- ll L = 0 , R = r + 1;
- // L = upper_bound(a+1,a+p+1,num) - a - 1;
- int lo = 1, hi = p;
- while(lo <= hi)
- {
- int mid = (lo + hi) >> 1;
- if( a[mid] <= num)
- {
- L = mid;
- lo = mid + 1;
- }
- else
- hi = mid - 1;
- }
- // R = lower_bound(c+1,c+r+1,num) - c;
- lo = 1;hi = r;
- while(lo <= hi)
- {
- int mid = (lo + hi) >> 1;
- if(c[mid] >= num)
- {
- hi = mid - 1;
- R = mid;
- }
- else
- lo = mid + 1;
- }
- L = min(L,(ll)i);
- R = max(R,(ll)i);
- ans += max((ll)0,L*((ll)r + 1 - R));
- // trace1(ans);
- }
- printf("%lld\n",ans);
- // cout<<ans<<endl;
- }
- cin>>i;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement