EOJ 3246实验室传染病(单调栈)@
来源:互联网 发布:bp网络和卷积神经网络 编辑:程序博客网 时间:2024/06/05 18:33
实验室传染病
Time limit per test: 2.0 seconds
Time limit all tests: 10.0 seconds
Memory limit: 256 megabytes
ECNU 的 ACM 实验室患上了一种传染病,这种病的传染性极强,并且因为每个人的体质不同传染的范围也不同。
为了简化这个问题,我们不妨假设有
但是我们并不知道 ECNU 实验室的传染源是谁,所以请你计算出每个人作为传染源时最后会使得多少人被感染?
Input
测试数据包含不超过 20 个测试文件,每个测试文件是单组数据。
第一行一个整数
接下来
数据保证位置各不相同。
Output
一行
Examples
input
40 108 318 1020 1
output
2 1 3 1
Source
2017 华东师范大学网赛解:主要思想就是不断更新左右区间;更新1:如果当前点的做范围的点的左边界大于他的左边界就一直更新,右边界同理:
更新2:当前的点虽然左范围覆盖不到左边的点但是可以通过右边界能够覆盖到的点去覆盖左边界;重复更新,直到无法更新
#include <iostream>#include <bits/stdc++.h>using namespace std;const int N = 1e5+7;typedef long long LL;typedef pair<int,int>pi;int l[N], r[N];pi a[N], b[N];int flag, n;void update1(){ stack<LL>st; for(int i=1;i<=n;i++) { while(!st.empty()&&st.top()>=l[i]) { if(l[st.top()]<l[i]) { l[i]=l[st.top()]; flag=1; } st.pop(); } st.push(i); } stack<LL>st2; for(int i=n;i>=1;i--) { while(!st2.empty()&&st2.top()<=r[i]) { if(r[st2.top()]>r[i]) { r[i]=r[st2.top()]; flag=1; } st2.pop(); } st2.push(i); } return ;}void update2(){ stack<LL>st; for(int i=1;i<=n;i++) { while(!st.empty()&&st.top()>=l[i]) { if(r[st.top()]>r[i]) { r[i]=r[st.top()]; flag=1; } st.pop(); } st.push(i); } stack<LL>st2; for(int i=n;i>=1;i--) { while(!st2.empty()&&st2.top()<=r[i]) { if(l[st2.top()]<l[i]) { l[i]=l[st2.top()]; flag=1; } st2.pop(); } st2.push(i); } return ;}int main(){ while(scanf("%d", &n)!=EOF) { for(int i=1;i<=n;i++) { scanf("%d %d",&a[i].first,&a[i].second); b[i]=a[i]; } sort(a+1,a+n+1); for(int i=1;i<=n;i++) { l[i]=(int)(lower_bound(a+1,a+n+1,make_pair(a[i].first-a[i].second,0))-(a)); r[i]=(int)(lower_bound(a+1,a+n+1,make_pair(a[i].first+a[i].second,0x3f3f3f3f))-(a+1)); } while(1) { flag=0; update1(); update2(); if(flag==0) break; } for(int i=1;i<=n;i++) { int k=(int)(lower_bound(a+1,a+n+1,b[i])-a); printf("%d%c",r[k]-l[k]+1,i==n?'\n':' '); } } return 0;}
阅读全文
0 0
- EOJ 3246实验室传染病(单调栈)@
- EOJ 3246 实验室传染病 线段树
- EOJ-大学生程序设计邀请赛(华东师范大学)-D-实验室传染病
- 2017 ECNU 网赛 D. 实验室传染病
- 传染病?!
- EOJ
- EOJ
- EOJ
- 单调栈 单调队列
- 传染病数学模型
- 传染病控制
- 传染病控制
- 传染病问题
- 单调栈
- 单调栈
- 单调栈
- 单调栈
- 单调栈
- 【LeetCode题解】523. Continuous Subarray Sum
- Kettle 4.4.0 通过 Java 代码 输出日志到表
- c++作业6
- 解析json字符串
- springMVC
- EOJ 3246实验室传染病(单调栈)@
- 计算机英语·I
- Oleg and shares CodeForces
- Spring成长之路
- oracle并行计算
- unity3d 协程
- Android学习九 ContentProvider内容提供者相关
- C#并行运算 Parallel.Invoke、Parallel.For、Parallel.Foreach性能测试及示例
- 6种常用的迭代器 ostream_iterator,istream_iterator,reverse_iterator,back_insert_iterator,front_insert_itera)