QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#36790 | #2442. Welcome Party | yyf_0404 | AC ✓ | 644ms | 11424kb | C++ | 1.3kb | 2022-06-28 20:07:03 | 2022-06-28 20:07:04 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
int n;
struct Pr
{
long long x, y;
bool operator < (const Pr& b)const
{
return y > b.y;
}
}a[100005];
struct Unit
{
long long x;
int id;
Unit(long long x = 0, int id = 0): x(x), id(id){}
bool operator < (const Unit& b)const
{
return x < b.x || x == b.x && id < b.id;
}
};
set<Unit> q;
void solve()
{
scanf("%d", &n);
for(int i = 0; i < n; i++)
scanf("%lld%lld", &a[i].x, &a[i].y);
sort(a, a + n);
for(int i = 0; i < n; i++)
q.insert(Unit(a[i].x, i));
long long maxn = -1, minn = 0x7fffffffffffffff;
for(int i = 0; i < n; i++){
q.erase(Unit(a[i].x, i));
if(i == n - 1){
minn = min(minn, abs(maxn - a[i].y));
continue;
}
auto p1 = q.lower_bound(Unit(a[i].y, -1));
if(p1 != q.end() && p1->x > maxn)
minn = min(minn, p1->x - a[i].y);
if(p1 != q.begin()){
p1--;
if(p1->x > maxn)
minn = min(minn, a[i].y - p1->x);
}
if(i) minn = min(minn, abs(maxn - a[i].y));
maxn = max(maxn, a[i].x);
}
printf("%lld\n", minn);
}
int main()
{
int T;
scanf("%d", &T);
while(T--) solve();
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 644ms
memory: 11424kb
input:
66 5 27 46 89 13 55 8 71 86 22 35 3 3 5 4 7 6 2 2 0 1000000000 1000000000 0 2 1000000000 0 0 1000000000 2 1000000000 0 1000000000 0 2 0 1000000000 0 1000000000 2 1000000000 1000000000 0 0 2 0 0 0 0 2 1000000000 1000000000 1000000000 1000000000 3 90 30 90 50 90 85 3 0 0 0 2 0 5 3 20 30 20 50 20 70 3 ...
output:
3 1 0 0 1000000000 1000000000 1000000000 0 0 5 0 10 5 10 3 0 10 5 0 5 0 10 5 10 3 0 10 5 0 146595730144168239 10974087366700578 21076180420813408 183538167814754058 46751451188711820 365292306661444331 23639646046527434 40476687889457528 270663364266559542 139940820548070767 21494649603533736 100200...
result:
ok 66 lines