社区讨论
手写单调队列求调 WA 18pts
P3088[USACO13NOV] Crowded Cows S参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @lo8xym8s
- 此快照首次捕获于
- 2023/10/28 02:23 2 年前
- 此快照最后确认于
- 2023/10/28 02:23 2 年前
CPP
#include<bits/stdc++.h>
#define ll long long
#define MAXN 50001
#define il inline
#define rg register
using namespace std;
struct cow
{
ll pos,height,i;
}a[MAXN];
queue<cow>s1,s2;
ll crowded[MAXN];
il bool comp(cow a1,cow a2)
{
return a1.pos<a2.pos;
}
int main()
{
ll n,d,ans=0;cin>>n>>d;
for (rg ll i=1;i<=n;++i)
{
cin>>a[i].pos>>a[i].height;
a[i].i=i;
}
sort(a+1,a+n+1,comp);
for (rg ll i=1;i<=n;++i)
{
while(s1.size())
{
while (s1.size()&&s1.front().pos+d*2<a[i].pos)
s1.pop();
while (s1.size()&&s1.back().height*2 <= a[i].height)
{
++crowded[s1.back().i];
s1.pop();
}
if (s1.size()&&!(s1.back().pos+d*2<a[i].pos)) break;
}
s1.push(a[i]);
}
for (rg ll i=n;i>1;--i)
{
while(s2.size())
{
while (s2.size()&&s2.front().pos-d*2>a[i].pos)
s2.pop();
while (s2.size()&&s2.back().height*2<=a[i].height)
{
++crowded[s2.back().i];
s2.pop();
}
if (s2.size()&&!(s2.back().pos-d*2>a[i].pos)) break;
}
s2.push(a[i]);
}
for (rg ll i=1;i<=n;++i) if (crowded[i]) ++ans;
cout<<ans;
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...