76分代码:
#include<bits/stdc++.h>
using namespace std;
const int N = 5e4+5;
struct node
{
int x;
int y;
};
int n;
node a[N];
map<int,int>t;
map<int,int>t2;
bool cmp(node x,node y)
{
return x.x<y.x;
}
int main()
{
int sum = 0;
scanf("%d",&n);
for(int i = 1;i<=n;i++)
{
scanf("%d %d",&a[i].x,&a[i].y);
if(t2[a[i].y] == 0)
{
t2[a[i].y] = 1;
sum++;
}
}
int ans = 0x3ffffff;
sort(a+1,a+n+1,cmp);
int ti = 1;
t[a[1].y] = 1;
int z = 1;
for(int i = 1;i<=n;i++)
{
while(z<sum&&ti<n)
{
ti++;
t[a[ti].y]++;
if(t[a[ti].y] == 1)
{
z++;
}
}
if(z == sum)
{
ans = min(ans,a[ti].x-a[i].x);
}
t[a[i].y]--;
if(t[a[i].y] == 0)
{
z--;
}
}
printf("%d",ans);
return 0;
}
100分代码:
#include<bits/stdc++.h>
using namespace std;
const int N = 5e4+5;
struct node
{
int x;
int y;
};
int n;
node a[N];
map<int,int>t;
map<int,int>t2;
bool cmp(node x,node y)
{
return x.x<y.x;
}
int main()
{
int sum = 0;
scanf("%d",&n);
for(int i = 1;i<=n;i++)
{
scanf("%d %d",&a[i].x,&a[i].y);
if(t2[a[i].y] == 0)
{
t2[a[i].y] = 1;
sum++;
}
}
int ans = 2e9;
sort(a+1,a+n+1,cmp);
int ti = 1;
t[a[1].y] = 1;
int z = 1;
for(int i = 1;i<=n;i++)
{
while(z<sum&&ti<n)
{
ti++;
t[a[ti].y]++;
if(t[a[ti].y] == 1)
{
z++;
}
}
if(z == sum)
{
ans = min(ans,a[ti].x-a[i].x);
}
t[a[i].y]--;
if(t[a[i].y] == 0)
{
z--;
}
}
printf("%d",ans);
return 0;
}
ans要设定得非常大才行!!@_@