作业介绍

#include <bits/stdc++.h>
using namespace std;
const int N = 5e4 + 5;
int n, a[N], id[N], tag[N];

void update(int l, int r, int c) {
	//1.在一块里
	if (id[l] == id[r]) {
		for (int i = l; i <= r; i++) {
			a[i] += c;
		}
	} else {
		//1.从l到l块的终点暴力+c
		for (int i = l; id[i] == id[l]; i++) {
			a[i] += c;
		}
		//2.从l+1块到r-1块直接修改标记
		for (int i = id[l] + 1; i < id[r]; i++) {
			tag[i] += c;
		}
		//3.从r块开始到r暴力+c
		for (int i = r; id[i] == id[r]; i--) {
			a[i] += c;
		}
	}
}

int query(int x) {
	return a[x] + tag[id[x]];
}

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin >> n;
	int len = sqrt(n);
	for (int i = 1; i <= n; i++) {
		cin >> a[i];
		id[i] = (i - 1) / len + 1;
	}
	for (int i = 1; i <= n; i++) {
		int op, l, r, c;
		cin >> op >> l >> r >> c;
		if (op == 0) {
			update(l, r, c);
		} else {
			cout << query(r) << '\n';
		}
	}
	return 0;
}
#include <bits/stdc++.h>
using namespace std;
const int N = 5e4 + 5;
int n, a[N], id[N], sum[N], Max[N], len;

void update(int l, int r) {
	if (id[l] == id[r]) {
		if (Max[id[l]] == 1 || Max[id[l]]==0)
			return;
		for (int i = l; i <= r; i++) {
			if(a[i]!=0)
				a[i] = sqrt(a[i]);
		}
		Max[id[l]] = 0;
		sum[id[l]] = 0;
		for (int i = (id[l] - 1) * len + 1; id[i] == id[l]; i++) {
			Max[id[l]] = max(Max[id[l]], a[i]);
			sum[id[l]] += a[i];
		}
	} else {
		if (Max[id[l]] != 1) {
			for (int i = l; id[i] == id[l]; i++) {
				if(a[i])
				a[i] = sqrt(a[i]);
			}
			sum[id[l]] = 0;
			Max[id[l]] = 0;
			for (int i = (id[l] - 1) * len + 1; id[i] == id[l]; i++) {
				sum[id[l]] += a[i];
				Max[id[l]] = max(Max[id[l]], a[i]);
			}
		}
		for (int i = id[l] + 1; i < id[r]; i++) {
			if (Max[i] == 1)
				continue;
			sum[i] = 0, Max[i] = 0;
			for (int j = (i - 1) * len + 1; id[j] == i; j++) {
				if(a[j])
				a[j] = sqrt(a[j]);
				sum[i] += a[j];
				Max[i] = max(Max[i], a[j]);
			}
		}
		if (Max[id[r]] != 1) {
			for (int i = r; id[i] == id[r]; i--) {
				if(a[i])
				a[i] = sqrt(a[i]);
			}
			sum[id[r]] = 0;
			Max[id[r]] = 0;
			for (int i = (id[r] - 1) * len + 1; id[i] == id[r]; i++) {
				sum[id[r]] += a[i];
				Max[id[r]] = max(Max[id[r]], a[i]);
			}
		}
	}
}

int query(int l, int r) {
	if (id[l] == id[r]) {
		int res = 0;
		for (int i = l; i <= r; i++) {
			res += a[i];
		}
		return res;
	} else {
		int res = 0;
		for (int i = l; id[i] == id[l]; i++)
			res += a[i];
		for (int i = id[l] + 1; i < id[r]; i++)
			res += sum[i];
		for (int i = r; id[i] == id[r]; i--)
			res += a[i];
		return res;
	}
}

int main() {
	cin >> n;
	len = sqrt(n);
	for (int i = 1; i <= n; i++) {
		cin >> a[i];
		id[i] = (i - 1) /len + 1;
		sum[id[i]] += a[i];
		Max[id[i]] = max(Max[id[i]], a[i]);
	}
	for (int i = 1; i <= n; i++) {
		int op, l, r, c;
		cin >> op >> l >> r >> c;
		if (op == 0) {
			update(l, r);
		} else
			cout << query(l, r) << endl;
	}
	return 0;
}
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
int n, a[N], id[N], siz[N], len, tot;
vector<int>b[N];

void update(int l, int r) {
	for (int i = 1; i <= tot; i++) {
		if (l > siz[i]) {
			l -= siz[i];
		} else {
			b[i].insert(b[i].begin() + l - 1, r);
			siz[i]++;
			break;
		}
	}
}

int query(int x) {
	for (int i = 1; i <= tot; i++) {
		if (x > siz[i]) {
			//	cout << x << " " << i << " " << siz[i] << endl;
			x -= siz[i];
		} else {
			return b[i][x - 1];
		}
	}
}

int main() {
	cin >> n;
	len = sqrt(n);
	for (int i = 1; i <= n; i++) {
		cin >> a[i];
		id[i] = (i - 1) / len + 1;
		b[id[i]].push_back(a[i]);
		siz[id[i]]++;
		tot = max(tot, id[i]);
	}
	for (int i = 1; i <= n; i++) {
		int op, l, r, c;
		cin >> op >> l >> r >> c;
		if (op == 0) {
			update(l, r);
		} else
			cout << query(r) << endl;
	}
	return 0;
}
状态
已结束
题目
9
开始时间
2026-7-7 0:00
截止时间
2026-7-14 23:59
可延期
24 小时