70pts求改
查看原帖
70pts求改
1058410
Gcc_Gdb_7_8_1楼主2025/2/6 15:46
// Problem: P1318 积水面积
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P1318
// Memory Limit: 128 MB
// Time Limit: 1000 ms
//
// Powered by CP Editor (https://cpeditor.org)

// clang-format off
#include <bits/stdc++.h>
#ifndef __DEBUG_LIB
#define __DEBUG_LIB

bool isdebug = false;

#define change(x) isdebug = x
#define Debugc \
  if (isdebug) cout
#define Debug if (isdebug)

#endif
using namespace std;

#define LL long long
#define Pii pair<int, int>
#define ULL unsigned long long

/*
              |*|
           |**|*|
        |**|**|||
        ||*|**|||*|
   |**|*|||||*|||*|
  ||**|||||||*|||*|
 |||*||||||||*|||||
--------------------
*/

namespace gdb7 {
	int a[10010];
	signed main() {
		int n;
		cin >> n;
		for (int i = 1; i <= n; ++i) {
			cin >> a[i];
		}
		LL ans = 0;
		int l = 1, r = 0, jieduan = 0;
		for (int i = 2; i <= n; ++i) {
			if (a[i] > a[i - 1]) {
				switch (jieduan) {
					case 0: {
						break;
					}
					case 1: {
						jieduan = 2;
						r = i;
						// maxhigh = max(maxhigh, a[i]);
						break;
					}
					case 2: {
						// jieduan = 2;
						r = i;
						// maxhigh = max(maxhigh, a[i]);
					}
				}
			} else if (a[i] < a[i - 1]) {
				switch (jieduan) {
					case 1: {
						// jieduan = 1;
						r = i;
						// maxhigh = max(maxhigh, a[i]);
						break;
					}
					case 2: {
						jieduan = 0;
						// cout << l << " " << r << " " << min(a[l], a[r]) << endl;
						for (int i = l; i <= r; ++i) {
							// cout << a[i] << " " << min(a[l], a[r]) << endl;
							ans += max(min(a[l], a[r]) - a[i], 0);
						}
					}
					case 0: {
						jieduan = 1;
						l = r = i - 1;
						// maxhigh = max(maxhigh, a[i]);
					}
				}
			}
		}
		if (jieduan == 2) {
			for (int i = l; i <= r; ++i) {
				ans += max(min(a[l], a[r]) - a[i], 0);
			}
		}
		cout << ans << endl;
		return 0;
	}
};  // namespace gdb7

signed main() { return gdb7::main(); }
2025/2/6 15:46
加载中...