UVA1442Cave

来源:互联网 发布:端面铣数控怎样编程 编辑:程序博客网 时间:2024/06/16 19:18
//UVA1442Cave#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>using namespace std;const int MAXN = 1e6 + 10;int p[MAXN], s[MAXN], hL[MAXN];int main() {int T;scanf("%d", &T);while(T--) {int n;scanf("%d", &n);for(int i = 0; i < n; i++) scanf("%d", &p[i]);for(int i = 0; i < n; i++) scanf("%d", &s[i]);int level = s[0];for(int i = 0; i < n; i++){if(level < p[i]) level = p[i];if(level > s[i]) level = s[i];hL[i] = level;}/*从左往右扫描 假设水不会向右漫延,此组数据保证了水不会向左漫延 */int ans = 0;level = s[n - 1];for(int i = n - 1; i >= 0; i--) {if(level < p[i]) level = p[i];if(level > s[i]) level = s[i];ans += min(hL[i], level) - p[i];}/*与上述情况同理,但扫描方向相反取两者交集,得到的水位不会向两个方向漫延 */printf("%d\n", ans);}return 0;}/*1156 6 7 5 5 5 5 5 5 1 1 3 3 2 210 10 10 11 6 8 7 10 10 7 6 4 7 11 11*/