rt,下面的代码期望时间复杂度 Θ(2nk),能有 90 分:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,k,p,lst[10004],num[10004],sum=0;
bool vis[10004];
struct node{
ll a;
bool b;
}m[2000006];
ll fas(ll n){
return n*(n-1)/2;
}
int main(){
cin>>n>>k>>p;
for(int i=1,k;i<=n;i++){
cin>>m[i].a>>k;
m[i].b=(k<=p);
lst[m[i].a]=i,num[m[i].a]++;
}
for(int i=1;i<=n;i++){
if(!vis[m[i].a]){
ll len=lst[m[i].a]-i+1,N=num[m[i].a],ans=fas(N),tmp=0,f=1;
for(int j=i;j-i+1<=len;j++){
f=1;
if(m[j].b)ans-=fas(tmp),tmp=0,f=0;
if(m[j].a==m[i].a&&f)tmp++;
}
ans-=fas(tmp),tmp=0,f=0,sum+=ans,vis[m[i].a]=1;
}
}
cout<<sum;
}