Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- int arr1[200010];
- int arr2[200010];
- int segmant_tree[1<<20];
- ll a ,b;
- int getsum(int node ,int start , int en ){
- if(en<a||start>b)return 0;
- if(start>=a&&en<=b)return segmant_tree[node];
- int mid=(start+en)/2;
- return getsum(node*2,start,mid)+getsum(node*2+1,mid+1,en);
- }
- void update(int node , int start , int en){
- if(en<a||start>b)return ;
- if(start==a&&en==b){
- segmant_tree[node]++;
- return;
- }
- int mid=(start+en)/2;
- update(node*2,start,mid);
- update(node*2+1,mid+1,en);
- segmant_tree[node]=segmant_tree[node*2]+segmant_tree[node*2+1];
- }
- int main()
- {
- int t;
- cin>>t;
- while(t--){
- for(int i=0;i<1<<20;i++)segmant_tree[i]=0;
- int n ;
- cin>>n;
- int d;
- for(int i=1;i<=n;i++)cin>>arr1[i];
- for(int i=1;i<=n;i++){
- cin>>d;
- arr2[d]=i;
- }
- long long ans=0;
- for(int i=1;i<=n;i++){
- ll to=arr2[arr1[i]];
- a=to;
- b=n;
- ans+=getsum(1,1,n);
- b=to;
- update(1,1,n);
- }
- cout<<ans<<endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement