求调求调
查看原帖
求调求调
741720
__Mkigita__楼主2024/10/5 17:10

本人蒟蒻,按道理来说我这个算法应该能过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;
}
2024/10/5 17:10
加载中...