样例2都没过
查看原帖
样例2都没过
162196
伟大的王夫子楼主2020/8/7 17:01
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll f[30010][5];
int a[30010], n, m, b[30010], t;
ll c[30010];
map<int, int> h;
void add(int x, ll y) {
	while (x <= t) {
		c[x] += y;
		x += x & -x;
	}
}
ll ask(int x) {
	ll ans = 0;
	while (x) {
		ans += c[x];
		x -= x & -x;
	}
	return ans;
}
int main() {
	cin >> n;
	for (register int i = 1; i <= n; ++i) scanf("%d", a + i);
	memcpy(b, a, sizeof b);
	sort(b + 1, b + n + 1);
	t = unique(b + 1, b + n + 1) - b - 1;
	f[0][0] = 1; 
	a[0] = 1;
	for (register int i = 1; i <= n; ++i)
		a[i] = lower_bound(b + 1, b + t + 1, a[i]) - b + 1;
	//for (register int i = 1; i <= n; ++i) 
	for (register int i = 1; i <= 3; ++i) {
		memset(c, 0, sizeof c);
		add(1, f[i - 1][0]);
		for (register int j = 1; j <= n; ++j) {
			f[i][j] = ask(a[j] - 1);
			add(a[j], f[i - 1][j]);
		}
	}
	//for (register int i = 1; i <= n; ++i) cout << f[1][i];
	long long ans = 0;
	for (register int i = 1; i <= n; ++i) ans += f[3][i];
	cout << ans;
}
2020/8/7 17:01
加载中...