求助为什么tle
查看原帖
求助为什么tle
347589
Zelotz楼主2021/11/25 18:00

不确保正确,写了重载但是没有sort,复杂度应该是O(Tn) 呜呜呜

#include <bits/stdc++.h>
using namespace std;
#define srand srand(time(NULL))
#define random(x) rand() % (x)
#define il inline
#define ptc putchar
#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize("Ofast")
#pragma GCC optimize("inline")
#pragma GCC optimize("-fgcse")
#pragma GCC optimize("-fgcse-lm")
#pragma GCC optimize("-fipa-sra")
#pragma GCC optimize("-ftree-pre")
#pragma GCC optimize("-ftree-vrp")
#pragma GCC optimize("-fpeephole2")
#pragma GCC optimize("-ffast-math")
#pragma GCC optimize("-fsched-spec")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("-falign-jumps")
#pragma GCC optimize("-falign-loops")
#pragma GCC optimize("-falign-labels")
#pragma GCC optimize("-fdevirtualize")
#pragma GCC optimize("-fcaller-saves")
#pragma GCC optimize("-fcrossjumping")
#pragma GCC optimize("-fthread-jumps")
#pragma GCC optimize("-funroll-loops")
#pragma GCC optimize("-fwhole-program")
#pragma GCC optimize("-freorder-blocks")
#pragma GCC optimize("-fschedule-insns")
#pragma GCC optimize("inline-functions")
#pragma GCC optimize("-ftree-tail-merge")
#pragma GCC optimize("-fschedule-insns2")
#pragma GCC optimize("-fstrict-aliasing")
#pragma GCC optimize("-fstrict-overflow")
#pragma GCC optimize("-falign-functions")
#pragma GCC optimize("-fcse-skip-blocks")
#pragma GCC optimize("-fcse-follow-jumps")
#pragma GCC optimize("-fsched-interblock")
#pragma GCC optimize("-fpartial-inlining")
#pragma GCC optimize("no-stack-protector")
#pragma GCC optimize("-freorder-functions")
#pragma GCC optimize("-findirect-inlining")
#pragma GCC optimize("-fhoist-adjacent-loads")
#pragma GCC optimize("-frerun-cse-after-loop")
#pragma GCC optimize("inline-small-functions")
#pragma GCC optimize("-finline-small-functions")
#pragma GCC optimize("-ftree-switch-conversion")
#pragma GCC optimize("-foptimize-sibling-calls")
#pragma GCC optimize("-fexpensive-optimizations")
#pragma GCC optimize("-funsafe-loop-optimizations")
#pragma GCC optimize("inline-functions-called-once")
#pragma GCC optimize("-fdelete-null-pointer-checks")
#define reg register
#define mp make_pair
typedef __int128 LL;
typedef long long ll;
typedef pair<int, int> PII;
namespace cyyh {
	template <typename T>
	il void read(T &x) {
		x = 0; T f = 1; char ch;
		while (!isdigit(ch = getchar())) f -= (ch == '-') << 1;
		while (isdigit(ch)) x = (x << 1) + (x << 3) + (ch & 15), ch = getchar(); x *= f;
	}
	template <typename T>
	il void write(T x) {
		if (x < 0) ptc('-'), x = -x;
		if (x > 9) write(x / 10);
		ptc(x % 10 + '0');
	}
	template <typename T>
	il T lowbit(const T &x) {
		return x & -x;
	}
}
using namespace cyyh; 
const int N = 3e5 + 5;
int T, n, a[N];
struct node {
	int x, pos, t;
	bool operator < (const node &r) const {
		return t > r.t;
	}
} b[N];
int main() {
//	freopen("1.txt", "w", stdout);
	read(T);
	bool flg = 0;
	if (T == 1) flg = 1;
	while (T--) {
		read(n);
		memset(b, 0, sizeof b);
		int ans = 0;
		for (int i = 1; i <= n; ++i) {
			read(a[i]);
		}
		for (int i = 1; i <= n; ++i) {
			if (i > 1 && a[i] > a[i - 1] && i < n && a[i] > a[i + 1]) ++b[i].x;
			if (i > 1 && a[i] < a[i - 1] && i < n && a[i] < a[i + 1]) ++b[i].x;
			ans += b[i].x;
			b[i].pos = i;
		}
//		if (flg == 1) cout << ans << endl;
		for (int i = 2; i < n; ++i)
			b[i].t = b[i - 1].x + b[i + 1].x + b[i].x;
		int pos = 0, maxn = 0;
		for (int i = 2; i < n; ++i) {
			if (b[i].t > maxn) {
				maxn = b[i].t;
				pos = i;
			}
		}
		int id = pos, cnt = 0, cnt2 = 0;
//		cout << id << endl;
		a[id] = a[id - 1];
		--id;
		if (a[id] > a[id - 1] && a[id] > a[id + 1] && id > 1 && id < n) ++cnt;
		if (a[id] < a[id - 1] && a[id] < a[id + 1] && id > 1 && id < n) ++cnt;
		id += 2;
		if (a[id] > a[id - 1] && a[id] > a[id + 1] && id > 1 && id < n) ++cnt;
		if (a[id] < a[id - 1] && a[id] < a[id + 1] && id > 1 && id < n) ++cnt;
		--id;
		a[id] = a[id + 1];
		--id;
		if (a[id] > a[id - 1] && a[id] > a[id + 1] && id > 1 && id < n) ++cnt2;
		if (a[id] < a[id - 1] && a[id] < a[id + 1] && id > 1 && id < n) ++cnt2;
		id += 2;
		if (a[id] > a[id - 1] && a[id] > a[id + 1] && id > 1 && id < n) ++cnt2;
		if (a[id] < a[id - 1] && a[id] < a[id + 1] && id > 1 && id < n) ++cnt2;
		--id;
//		cout << "cnt2: " << cnt2 << ' ' << id << endl;
		if (cnt < cnt2) a[id] = a[id - 1];
		ans = 0;
		for (int i = 1; i <= n; ++i) {
//			cout << a[i] << ' ';
			if (i > 1 && a[i] > a[i - 1] && i < n && a[i] > a[i + 1]) ++ans;
			if (i > 1 && a[i] < a[i - 1] && i < n && a[i] < a[i + 1]) ++ans;
//			cout << ans << "!  ";
		}
//		cout << "\n!!";
		write(ans), ptc('\n');
	}
	return 0;
}
2021/11/25 18:00
加载中...