为什么会RE
查看原帖
为什么会RE
1040409
dhpzy楼主2024/7/21 10:44
#include<bits/stdc++.h>
using namespace std;
int ans,n,k,p,c[500010],b[500100],f[500010][30];
vector<int>a[60];
int find(int l,int r)
{
	int k1=(r-l+1);
	return min(f[l][k1],f[r-(1<<k1)+1][k1]);
}
int main()
{
	cin>>n>>k>>p;
	for(int i=1;i<=n;i++)
	{
		cin>>b[i]>>f[i][0];
		a[b[i]].push_back(i);
		c[i]=a[b[i]].size()-1;
	}
	for(int i=1;i<=20;i++)
		for(int j=1;j<=n;j++) f[j][i]=1e9;
	for(int t=1;t<=20;t++)
		for(int i=1;i+(1<<t)-1<=n;i++) f[i][t]=min(f[i][t-1],f[i+(1<<(t-1))][t-1]);
	for(int i=2;i<=n;i++)
	{
		int l=0,r=c[i];
		while(l<=r)
		{
			int mid=(l+r)>>1;
			if(find(a[b[i]][mid],a[b[i]][c[i]])<=p) l=mid+1;
			else r=mid-1;
		}
		ans+=l;
		if(l-1==c[i]) ans--;
	}
	cout<<ans;
}
2024/7/21 10:44
加载中...