本人蒟蒻,按道理来说我这个算法应该能过80pts,但是在代码实现上出现了问题,貌似时复nlogn
#include<bits/stdc++.h>
using namespace std;
map<int,vector<int> > reflection;
int n,k,p;
int ST[200005][21];
queue<int> co[60];
int ask(int l,int r){
int cn=log2(r-l+1);
return min(ST[l][cn],ST[r-(1<<cn)+1][cn]);
}
int main(){
scanf("%d%d%d",&n,&k,&p);
for(int i=1;i<=n;i++){
int col,le;
scanf("%d%d",&col,&le);
ST[i][0]=le;
reflection[col].push_back(i);
co[col].push(col);
}
for(int i=1;i<=20;i++){
for(int j=1;j<=n;j++){
ST[j][i]=min(ST[j][i-1],ST[j+(1<<(i-1))][i-1]);
}
}
int ans=0;
for(int i=1;i<=k;i++){
while(!co[i].empty()){
int mqc=co[i].front();
co[i].pop();
for(int i=0;i<reflection[mqc].size();i++){
for(int j=i+1;j<reflection[mqc].size();j++){
if(ask(i,j)<=p) ans++;
}
}
}
}
cout<<ans;
return 0;
}