I got this que in paypal OA can any one let me know where my approach is wrong | paypal
Anonymous User
627

image
image
image
`#include <bits/stdc++.h>
using namespace std;
#define For(i,n) for(int i=0;i<n;i++)
#define mem(a,b) memset(a,b,sizeof(a))
#define int long long int
#define ld long double
#define fio ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0)
#define pb push_back
#define mp make_pair
#define mod 1000000007
#define ld long double
#define pb push_back
#define ff first
#define ss second
#define vpi vector<pair<int,int> >
#define vv vector
#define MAXN 1001
int A[MAXN];
const int N = 100001;
int ans[N], ans2[N];
void merge(pair<int, int> a[], int start,
int mid, int end)
{
pair<int, int> f[mid - start + 1],
s[end - mid];

int n = mid - start + 1;
int m = end - mid;

for (int i = start; i <= mid; i++)
    f[i - start] = a[i];
for (int i = mid + 1; i <= end; i++)
    s[i - mid - 1] = a[i];

int i = 0, j = 0, k = start;
int cnt = 0;
while (i < n && j < m)
{
    if (f[i].second <= s[j].second)
    {
        ans[f[i].first] += cnt;
        a[k++] = f[i++];
    }
    else
    {
        cnt++;
        a[k++] = s[j++];
    }
}
while (i < n)
{
    ans[f[i].first] += cnt;
    a[k++] = f[i++];
}
while (j < m)
{
    a[k++] = s[j++];
}

}
void mergesort(pair<int, int> item[],
int low, int high)
{
if (low >= high)
return;

int mid = (low + high) / 2;
mergesort(item, low, mid);
mergesort(item, mid + 1, high);
merge(item, low, mid, high);

}
void print(int n)
{
for (int i = 0; i < n; i++)
cout << ans[i] << " " << ans2[i] << " ";
}

int32_t main()
{
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
fio;
int t;
cin >> t;
while (t--)
{
int n;
cin >> n;
int k;
cin >> k;
vector arr(n);

    for (int i = 0; i < n; i++)
    {
        cin >> arr[i];
    }
    pair<int, int> a[n], a1[n];
    for (int i = 0; i < n; i++)
    {
        a[i].second = arr[i];
        a[i].first = i;
    }

    mergesort(a, 0, n - 1);

    reverse(arr.begin(), arr.end());
    for (int i = 0; i < n; i++)
    {
        a1[i].second = arr[i];
        a1[i].first = i;
    }
    for (int i = 0; i <= n; i++)
    {
        ans2[i] = ans[i];
        ans[i] = 0;
    }
    mergesort(a1, 0, n - 1);
    //print(n);
    while (k--)
    {
        int x;
        cin >> x;
        if (x == 1)
            cout << ans2[0] + 1 << endl;
        else if (x == n)
            cout << ans[n - 1 - n + 1] + 1 << endl;
        else
            cout << ans[n - 1 - x + 1] + ans2[x - 1] + 1 << endl;


    }


}

}`

Comments (2)