求助 WA
查看原帖
求助 WA
526017
COsm0s楼主2023/10/1 19:47
#define int long long
constexpr int N = 5e5 + 5, inf = LLONG_MAX;
namespace Jelly {
	int n, q, w, L[N], R[N], a[N], b[N], it[N];
	int work(int l, int r, int k) {
		int x = it[l], y = it[r], ans = 0;
		if(x == y) {
			REP(i, l, r) if(a[i] <= k) ans ++;
			return ans;
		}
		REP(i, l, R[x]) if(a[i] <= k) ans ++;
		REP(i, L[y], r) if(a[i] <= k) ans ++;	
		REP(i, x + 1, y - 1) ans += (int)(lower_bound(b + L[i], b + R[i] + 1, k) - b) - L[i];
		return ans;
	}
	void solve() {
		char opt;
		Read(opt);
		if(opt == 'M') {
			int x, y;
			Read(x, y);
			a[x] = y;
			REP(i, L[it[x]], R[it[x]]) b[i] = a[i];
			sort(b + L[it[x]], b + R[it[x]] + 1);
		}
		else {
			int l, r, x;
			Read(l, r, x);
			Writeln(work(l, r, x));
		}
	}
	int main() {
		Read(n, q);
		w = ceil(sqrt(n));
		REP(i, 1, n) Read(a[i]), b[i] = a[i];
		REP(i, 1, w) L[i] = (i - 1) * w + 1, R[i] = min(n, i * w);
		REP(i, 1, w) REP(j, L[i], R[i]) it[j] = i, sort(b + L[i], b + R[i] + 1);
		while(q --) solve();
		return 0;
	}
}
signed main() {
	int T = 1;
//	Read(T);
	while (T --) Jelly::main();
	return 0;
}

如上示代码,过了样例。

2023/10/1 19:47
加载中...