uva4621

来源:互联网 发布:手机淘宝抢拍技巧 编辑:程序博客网 时间:2024/06/16 10:10

main algorithm:

scan from left to right and right to left to make sure it can save water

code:

#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int INF = 0x3f3f3f3f;const int MAXN = 1000010;int a[MAXN], b[MAXN];int n, h[MAXN];int main() {int t;scanf("%d", &t);while(t--) {scanf("%d", &n);for(int i=1; i<=n; i++) scanf("%d", &a[i]);for(int i=1; i<=n; i++) scanf("%d", &b[i]);a[0] = b[0] = INF;a[n+1] = b[n+1] = INF;int ah = INF;for(int i=1; i<=n; i++) {if(a[i-1] > ah) ah = a[i-1];if(a[i] > ah) ah = a[i];if(b[i] < ah) ah = b[i];h[i] = ah;}ah = INF;for(int i=n; i>=1; i--) {if(a[i+1] > ah) ah = a[i+1];if(a[i] > ah) ah = a[i];if(b[i] < ah) ah = b[i];if(ah < h[i]) h[i] = ah;ah = h[i];}int ans = 0;for(int i=1; i<=n; i++)ans += h[i]-a[i];printf("%d\n", ans);}return 0;}



0 0