TLE 求助 ┭┮﹏┭┮
查看原帖
TLE 求助 ┭┮﹏┭┮
159548
Zachary_Cloud楼主2021/7/16 21:40

0ms TLE,蒟蒻硬是没看出错误…… >,.,<

Code:

#include <bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define il inline
#define ll long long
#define ls (rt << 1)
#define rs (rt << 1 | 1)
#define mid (l + r >> 1)
#define N 100001
ll n, m, a[N], tot;
struct node {
	ll data, l, r, tag;
} tr[N << 2];
il void build(ll rt, ll l, ll r) {
	tr[rt].l = l; tr[rt].r = r;
	if (l == r) {
		tr[rt].data = a[l];
		if (a[l] == 1 || a[l] == 0) tr[rt].tag = 1;
		else tr[rt].tag = 0;
		return;
	}
	build(ls, l, mid); build(rs, mid + 1, r);
	tr[rt].data = tr[ls].data + tr[rs].data;
	tr[rt].tag = tr[ls].tag && tr[rs].tag;
}
il void change(ll rt, ll l, ll r, ll x, ll y) {
	if (l == r) {
		tr[rt].data = sqrt(tr[rt].data);
		if (tr[rt].data == 0 || tr[rt].data == 1) tr[rt].tag = 1;
		else tr[rt].tag = 0;
		return;
	}
	if (x <= mid && !tr[ls].tag) change(ls, l, mid, x, y);
	if (y > mid && !tr[rs].tag) change(rs, mid + 1, r, x, y);
	tr[rt].data = tr[ls].data + tr[rs].data;
	tr[rt].tag = tr[ls].tag && tr[rs].tag;
}
il ll query(ll rt, ll l, ll r, ll x, ll y) {
	if (x <= l && r <= y) return tr[rt].data;
	ll ans = 0;
	if (x <= mid) ans += query(ls, l, mid, x, y);
	if (y > mid) ans += query(rs, mid + 1, r, x, y);
	return ans;
}
signed main() {
	// IOS;
	while (cin >> n && n != EOF) {
		cout << "Case #" << ++tot << ":" << '\n';
		for (ll i = 1; i <= n; ++i) cin >> a[i];
		build(1, 1, n);
		cin >> m;
		for (ll i = 1, op, x, y; i <= m; ++i) {
			cin >> op >> x >> y;
			if (x > y) swap(x, y);
			if (op == 0) change(1, 1, n, x, y);
			else cout << query(1, 1, n, x, y) << endl;
		} 
		cout << '\n';
	}
	return 0;
}
2021/7/16 21:40
加载中...