Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // #define _CRT_SECURE_NO_WARNINGS
- // ░░░░░░░▄▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▄░░░░░░
- // ░░░░░░█░░▄▀▀▀▀▀▀▀▀▀▀▀▀▀▄░░█░░░░░
- // ░░░░░░█░█░▀░░░░░▀░░▀░░░░█░█░░░░░
- // ░░░░░░█░█░░░░░░░░▄▀▀▄░▀░█░█▄▀▀▄░
- // █▀▀█▄░█░█░░▀░░░░░█░░░▀▄▄█▄▀░░░█░
- // ▀▄▄░▀██░█▄░▀░░░▄▄▀░░░░░░░░░░░░▀▄
- // ░░▀█▄▄█░█░░░░▄░░█░░░▄█░░░▄░▄█░░█
- // ░░░░░▀█░▀▄▀░░░░░█░██░▄░░▄░░▄░███
- // ░░░░░▄█▄░░▀▀▀▀▀▀▀▀▄░░▀▀▀▀▀▀▀░▄▀░
- // ░░░░█░░▄█▀█▀▀█▀▀▀▀▀▀█▀▀█▀█▀▀█░░░
- // ░░░░▀▀▀▀░░▀▀▀░░░░░░░░▀▀▀░░▀▀░░░░
- #include <algorithm>
- #include <array>
- #include <bitset>
- #include <chrono>
- #include <cmath>
- #include <cstdio>
- #include <cstring>
- #include <ctime>
- #include <deque>
- #include <fstream>
- #include <iostream>
- #include <map>
- #include <numeric>
- #include <queue>
- #include <random>
- #include <set>
- #include <stack>
- #include <string>
- #include <unordered_map>
- #include <unordered_set>
- #include <vector>
- //#pragma GCC optimize("Ofast,inline,unroll-loops,no-stack-protector,O2")
- //#pragma GCC target("avx,avx2,fma")
- using namespace std;
- #define rep(i, a, n) for (int i = a; i < n; i++)
- #define per(i, a, n) for (int i = n - 1; i >= a; i--)
- #define all(v) v.begin(), v.end()
- //#define sz(v) ((int)(v).size())
- #define trav(a, x) for (auto& a: x)
- typedef long long ll;
- typedef unsigned long long ull;
- typedef vector<int> vi;
- typedef vector<ll> vll;
- const int INF = 1e9;
- const int MOD = 1e9 + 9;
- const int di[4] = { 1, 0, -1, 0 };
- const int dj[4] = { 0, 1 ,0, -1 };
- mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());
- // сумма и точечные изменения
- int n;
- int a[100][100];
- int t[400][400];
- void build2(int v_big, int v, int l_big, int l, int r) {
- if (r - l == 1) {
- t[v_big][v] = a[l_big][l];
- return;
- }
- int m = (l + r) / 2;
- build2(v_big, 2 * v + 1, l_big, l, m);
- build2(v_big, 2 * v + 2, l_big, m, r);
- t[v_big][v] = t[v_big][2 * v + 1] + t[v_big][2 * v + 2];
- }
- void build1(int v, int l, int r) {
- if (r - l == 1) {
- build2(v, 0, l, 0, n);
- return;
- }
- int m = (l + r) / 2;
- build1(2 * v + 1, l, m);
- build1(2 * v + 2, m, r);
- for (int ni = 0; ni < 4*n; ni++) {
- t[v][ni] = t[2 * v + 1][ni] + t[2 * v + 2][ni];
- }
- }
- int asksum2(int v_big, int v, int l, int r, int askl, int askr) {
- if (l >= askr || r <= askl) {
- return 0;
- }
- if (l >= askl && r <= askr) {
- return t[v_big][v];
- }
- int m = (l + r) / 2;
- return asksum2(v_big, 2 * v + 1, l, m, askl, askr) + asksum2(v_big, 2 * v + 2, m, r, askl, askr);
- }
- int asksum1(int v, int l, int r, int aski1, int askj1, int aski2, int askj2) {
- if (l >= aski2 || r <= aski1) {
- return 0;
- }
- if (l >= aski1 && r <= aski2) {
- return asksum2(v, 0, 0, n, askj1, askj2);
- }
- int m = (l + r) / 2;
- return asksum1(2 * v + 1, l, m, aski1, askj1, aski2, askj2) + asksum1(2 * v + 2, m, r, aski1, askj1, aski2, askj2);
- }
- void change2(int v_big, int v, int l, int r, int pos, int val) {
- if (r - l == 1) {
- t[v_big][v] = val;
- return;
- }
- int m = (l + r) / 2;
- if (pos < m) {
- change2(v_big, 2 * v + 1, l, m, pos, val);
- }
- else {
- change2(v_big, 2 * v + 2, m, r, pos, val);
- }
- t[v_big][v] = t[v_big][2 * v + 1] + t[v_big][2 * v + 2];
- }
- void change1(int v, int l, int r, int pos_i, int pos_j, int val) {
- if (r - l == 1) {
- change2(v, 0, 0, n, pos_j, val);
- return;
- }
- int m = (l + r) / 2;
- if (pos_i < m) {
- change1(2 * v + 1, l, m, pos_i, pos_j, val);
- }
- else {
- change1(2 * v + 2, m, r, pos_i, pos_j, val);
- }
- for (int ni = 0; ni < 4 * n; ni++) {
- t[v][ni] = t[2 * v + 1][ni] + t[2 * v + 2][ni];
- }
- }
- int main() {
- ios_base::sync_with_stdio(0);
- cin.tie(0);
- cout.tie(0);
- cin >> n;
- rep(i, 0, n) {
- rep(j, 0, n) {
- cin >> a[i][j];
- }
- }
- build1(0, 0, n);
- int m;
- cin >> m;
- rep(i, 0, m) {
- char s;
- cin >> s;
- if (s == 'c') {
- int pos_i, pos_j, val;
- cin >> pos_i >> pos_j >> val;
- change1(0, 0, n, pos_i, pos_j, val);
- }
- else {
- int i1, j1, i2, j2;
- cin >> i1 >> j1 >> i2 >> j2;
- int ans = asksum1(0, 0, n, i1, j1, i2 + 1, j2 + 1);
- cout << ans << "\n";
- }
- }
- }
- /*
- 7
- 1 4 2 5 3 0 7
- -4 2 1 11 8 2 9
- 12 26 7 1 1 0 1
- 10 7 6 2 1 2 3
- 13 -1 -4 -6 7 -7 2
- 4 2 1 2 6 0 3
- 4 1 4 8 4 1 2
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement