1311F - Moving Points - CodeForces Solution


data structures divide and conquer implementation sortings *1900

Please click on ads to support us..

C++ Code:

#include <bits/stdc++.h>
#define ll long long
#define pr pair<ll,ll>
using namespace std;
const ll N = 2e5+10;
ll n;
ll lowbit(ll x)
{
    return x&(-x);
}
struct point
{
    ll x,y;
}arr[N];
ll tr[N][2];
ll l[N];
void add(ll x,ll val)
{
    while(x<=n)
    {
        tr[x][0]++;
        tr[x][1]+=val;
        x+=lowbit(x);
    }
}
ll get(ll x,ll k)
{
    ll res=0;
    while(x)
    {
        res+=tr[x][k];
        x-=lowbit(x);
    }
    return res;
}
bool cmp(point a,point b)
{
    return a.x<b.x;
}
void solve()
{
    cin>>n;

    for(int i=1;i<=n;i++)
        cin>>arr[i].x;

    for(int i=1;i<=n;i++)
    {
        cin>>arr[i].y;
        l[i]=arr[i].y;
    }

    sort(arr+1,arr+1+n,cmp);
    sort(l+1,l+1+n);

    int m=unique(l+1,l+1+n)-l-1;

    ll ans=0;
    for(int i=1;i<=n;i++)
    {
        ll x=lower_bound(l+1,l+1+n,arr[i].y)-l;
        ans=ans+arr[i].x*get(x,0)-get(x,1);
        add(x,arr[i].x);
    }
    cout<<ans<<'\n';
}
int main()
{
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    ll tt = 1;
    //cin >> tt ;
    while( tt-- ) solve() ;
    return 0 ;
}


Comments

Submit
0 Comments
More Questions

1670D - Very Suspicious
1141B - Maximal Continuous Rest
1341A - Nastya and Rice
1133A - Middle of the Contest
385A - Bear and Raspberry
1311B - WeirdSort
1713F - Lost Array
236B - Easy Number Challenge
275A - Lights Out
147A - Punctuation
253A - Boys and Girls
1327E - Count The Blocks
984A - Game
12B - Correct Solution
1355B - Young Explorers
485A - Factory
628A - Tennis Tournament
1436B - Prime Square
1707B - Difference Array
1422C - Bargain
1611F - ATM and Students
660A - Co-prime Array
1692F - 3SUM
1470A - Strange Birthday Party
190D - Non-Secret Cypher
1721B - Deadly Laser
1721C - Min-Max Array Transformation
1721A - Image
1180C - Valeriy and Deque
557A - Ilya and Diplomas