// using policy based data structure
#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
typedef tree<pair<int,int>,null_type,less<pair<int,int>>,rb_tree_tag,
tree_order_statistics_node_update> PBDS;
int main()
{
PBDS Pos;
PBDS Neg;
int n;cin>>n;
long int teacher[n];
long int student[n];
long int diff[n];
long int cnt=0;
for(int i=0;i<n;i++)
{
    cin>>teacher[i];
}
for(int i=0;i<n;i++)
{
    cin>>student[i];
}
for(int i=0;i<n;i++)
{
   diff[i]=teacher[i]-student[i];
}
for(int i=0;i<n;i++)
{
    if(diff[i]==0)
    {
        int key;
        key=Pos.order_of_key({diff[i],i});
        cnt+=(Pos.size()-key);
        Pos.insert({diff[i],i});
    }
    else if(diff[i]>0)
    {
        int key;
        // positive side
        cnt+=Pos.size();
        // negative side
        key=Neg.order_of_key({diff[i],i});
        cnt+=key;
        Pos.insert({diff[i],i});
    }
    else{
        int key;
        key=Pos.order_of_key({abs(diff[i]),i});
        cnt+=(Pos.size()-key);
        Neg.insert({abs(diff[i]),i});
    }
}
cout<<cnt<<endl;
return 0;
}
Can you please review my code?
Pos and Neg are there to maintain  (Positive value & zero) and negative value separately. The absolute  value of negative number is stored in Neg.
