Uva 1442 扫描法
2017-04-12 11:31
316 查看
题目描述:
略了~~
这里是传送门
分析:
对于水具有联通性即对于没有隔断的谁来说,它们的高度是一样的.所以我们分别维护水的左边和右边
步骤:
从左向右扫描:水的值为最大的P[]和最小的D[],就可以得到从左向右的最优值,
同理得到向左的最大值,然后去MIn()
PS:初始化的时候默认最优,即cur=d[1]||d
Code:
略了~~
这里是传送门
分析:
对于水具有联通性即对于没有隔断的谁来说,它们的高度是一样的.所以我们分别维护水的左边和右边
步骤:
从左向右扫描:水的值为最大的P[]和最小的D[],就可以得到从左向右的最优值,
同理得到向左的最大值,然后去MIn()
PS:初始化的时候默认最优,即cur=d[1]||d
Code:
#include<iostream> #include<cstdio> #include<cmath> #include<cstring> #include<algorithm> #include<cstdlib> #include<queue> #define fo(i,a,b) for(int i=a;i<=b;i++) #define fod(i,a,b) for(int i=a;i>=b;i--) using namespace std; const int N=1e6+10; int T,n,h ,cur,p ,s ; int main(){ scanf("%d",&T); while(T--) { int ans=0; scanf("%d",&n); fo(i,1,n) scanf("%d",&p[i]); fo(i,1,n) scanf("%d",&s[i]); cur=s[1]; fo(i,1,n){ cur=max(cur,p[i]); cur=min(cur,s[i]); h[i]=cur; } cur=s ; for(int i=n;i>=1;i--){ cur=max(cur,p[i]); cur=min(cur,s[i]); h[i]=min(h[i],cur); } fo(i,1,n){ ans=ans+h[i]-p[i]; } printf("%d\n",ans); } return 0; }
相关文章推荐
- uva 1442 Cav(左右各扫描一次)
- UVA 1442 Cave 洞穴 (贪心+扫描)
- 【高效算法设计——双向扫描】 UVa 1442 Cave
- UVa 1442 (线性扫描) Cave
- UVA 1325 - Hypertransmission(扫描方法)
- UVa 11054 Wine trading in Gergovia(扫描)
- UVA - 1606 Amphiphilic Carbon Molecules 极角扫描法
- UVA11983 - Weird Advertisement(扫描线)
- UVA1492 LA5694 线段树扫描线(矩形面积合并)
- Meteor UVALive - 3905 (区间扫描)
- UVa 11054 - Wine trading in Gergovia(扫描法 水题)
- UVa 1606 两亲性分子 扫描法
- UVaLive 3695 Distant Galaxy (扫描线)
- uva1398 线性扫描
- UVALive 7261 Xiongnu's Land (扫描线)
- UVA - 11572 Unique Snowflakes 滑动扫描
- UVA 10755 Garbage Heap (预处理+扫描维护)
- uva1442
- UVALive 4221 Walk in the Park 扫描线
- UVALive 2519 Radar Installation 雷达扫描 区间选点问题