二分30ptsTLE求调
查看原帖
二分30ptsTLE求调
845230
herzFan楼主2024/5/20 20:50
#include<bits/stdc++.h>
using namespace std;
map<int, vector<int> > m;
map<int, int> mm;
int tot=0;
int f1(int x, int y)
{
	if (mm.find(x)==mm.end())
	{
		return -1;
	}
	int l=0, r=m[x].size()-1, ans=-1;
	while (l<=r)
	{
		tot++;
		int mid=(l+r)/2;
		if (m[x][mid]>=y)
		{
			ans=mid;
			r=mid-1;
		}
		else
		{
			l=mid+1;
		}
	}
	return ans;
}
int f2(int x, int y)
{
	//cout<<"   "<<mm[x]<<endl;
	if (mm.find(x)==mm.end())
	{
		return -1;
	}
	int l=0, r=m[x].size()-1, ans=-1;
	while (l<=r)
	{
		int mid=(l+r)/2;
		if (m[x][mid]<=y)
		{
			ans=mid;
			l=mid+1;
		}
		else
		{
			r=mid-1;
		}
	}
	return ans;
}
int main()
{
	//reopen("a.in", "r", stdin);
	//freopen("a.out", "w", stdout);
	int t;
	cin>>t;
	for (int i=1;i<=t;i++)
	{
		m.clear();
		mm.clear();
		int n;
		cin>>n;
		for (int j=1;j<=n;j++)
		{
			int a;
			cin>>a;
			m[a].push_back(j);
			mm[a]=11111;
			//cout<<a<<' '<<j<<endl;
		}
		int q;
		cin>>q;
		for (int j=1;j<=q;j++)
		{
			int l, r, x;
			cin>>l>>r>>x;
			int ll=f1(x, l);
			int rr=f2(x, r);
			if (ll==-1||rr==-1)
			{
				cout<<0<<endl;
				continue;
			}
			//cout<<rr<<' '<<ll<<endl;
			cout<<rr-ll+1<<endl;
		}
	}
	//cout<<tot<<endl;
	return 0;
}
2024/5/20 20:50
加载中...