25分求条
查看原帖
25分求条
907408
DeepSeekV3楼主2024/6/28 11:04
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=1e6+5;

void in(int &x){
	char c=getchar();
	while (c<'0' || c>'9') c=getchar();
	for (x=0; c>='0' && c<='9'; c=getchar())
		x=x*10+c-'0';
}

struct node
{
	int num;
	int id;
}a[N];

map <int, int> mp;
map <int, int> m;

bool cmp(node x, node y)
{
	return x.num < y.num;
}

int main(){
	ios::sync_with_stdio(false);
    cin.tie();
    int n;
    cin >> n;
    int sum = 0;
    for (int i = 1; i <= n; i++)
    {
    	cin >> a[i].num >> a[i].id;
    	mp[a[i].id]++;
    	if(mp[a[i].id] == 1) sum++;//统计id个数 
	}
	
	sort (a + 1, a + n + 1, cmp);
	int l = 1, r = 1, i;
	int ret = 0, mn = INT_MAX;
	while(l <= r)
	{
		while(r <= n && ret < sum)
		{
			m[a[r].id]++;
			if(m[a[r].id] == 1) ret++;
			r++;
		}
		//cout << r << " " << ret << endl;
		if(ret == sum)
		{
			mn = min(mn, a[r - 1].num - a[l].num);
		}
			
		if(m[a[l].id] == 1)
		{
			m[a[l].id] = 0;
			l++;
			ret--;
		}
		else
		{
			for (i = l + 1; i <= n; i++)
			{
				if(a[l].id != a[i].id)
				{
					break;
				}
			}
			l = i - 1;
			m[a[l].id] = 1;
			//cout << l << endl;
		}
	}
	cout << mn << endl;
	return 0;
}

2024/6/28 11:04
加载中...