点3WA
  • 板块P1102 A-B 数对
  • 楼主gol_sky
  • 当前回复1
  • 已保存回复1
  • 发布时间2025/7/30 18:48
  • 上次更新2025/7/30 18:51:36
查看原帖
点3WA
924357
gol_sky楼主2025/7/30 18:48

code:

#include<bits/stdc++.h>
using namespace std;
int n,a[200005];
int c,cnt = 0;
int f(int x){//第一次出现x的位置
	int ans = 0;
	int l = 1,r = n + 1,mid;
	while(l <= r){
		mid = (l + r) / 2;
		if(x <= a[mid]){
			if(a[mid] == x) ans = mid;
			r = mid - 1;
		}else{
			l = mid + 1;
		}
	}
	return ans;
}
int g(int x){//最后一次出现x的位置 
	int ans = 0;
	int l = 1,r = n + 1,mid;
	while(l <= r){
		mid = (l + r) / 2;
		if(x >= a[mid]){
			if(a[mid] == x) ans = mid;
			l = mid + 1;
		}else{
			r = mid - 1;
		}
	}
	return ans;
}
int main(){
	cin >> n >> c;
	for(int i = 1;i <= n;i++) cin >> a[i];
	sort(a + 1,a + n + 1);
	for(int i = 1;i <= n;i++){
   		int al = a[i];
   	//	cout<<al<<endl;
   //		cout<<f(al - c)<<" "<<g(al - c);
    	if(g(al - c) != 0)
        	cnt += g(al - c) - f(al - c) + 1;
     //   cout<<" "<<cnt<<endl;
	}

	cout<<cnt; 
	return 0;
}
2025/7/30 18:48
加载中...