Pls tell me the way to optimize it , its getting TLE by two methods

question link
method 1 by map.
#include <bits/stdc++.h>

using namespace std;

int main()

{

long int n, q;

cin >> n >> q;

unordered_map<int, long int> ms;

vector<long int> v;

for (int i = 0; i < n; i++)

{

    long int a;

    cin >> a;

    v.push_back(a);

    ms.insert({i + 1, a});

}

for (long int j = 0; j < q; j++)

{

    int value;

    long int d, k, l,r;

    cin >> d >> k >> l >> r;

    for (auto it : ms)

    {

        if (d == it.first)

            value = it.second;

    }

    int count=0;

    for (int i = l - 1; i <= r - 1; i++)

    {

        if (v[i] == value)

        {

            count++;

            if (count == k)

                cout << i + 1 << endl;

        }

    } if(count!=k)

      cout<<"-1"<<endl;

}

}

method 2 by function
#include <bits/stdc++.h>

using namespace std;

int hashfunc(int d,vector< long int>v,int n)

{ long int count1=0,value;

for(int i=0;i<n;i++)

{   long int count=0;

    for(int j=i;j>0;j--)

    {

         if(v[i]!=v[j-1])

         count++;

         if(v[i]==v[j-1])

         break;

    }

    if(count==i)

    {

        count1++;

        if(count1==d)

        value=v[i];

    }

} return value;

}

int main()

{

long int n, q;

cin >> n >> q;

vector<long int> v;

for (int i = 0; i < n; i++)

{

    long int a;

    cin >> a;

    v.push_back(a);

}

for (long int j = 0; j < q; j++)

{

    long int d, k, l,r;

    cin >> d >> k >> l >> r;

    long int value=hashfunc(d,v,n);

    int count=0;

    for (int i = l - 1; i <= r - 1; i++)

    {

        if (v[i] == value)

        {

            count++;

            if (count == k)

                cout << i + 1 << endl;

        }

    } if(count!=k)

      cout<<"-1"<<endl;

}

}
pls tell me

You can refer to my solution :sweat_smile: :sweat_smile:

1 Like