线段树求调
  • 板块P1001 A+B Problem
  • 楼主likejie
  • 当前回复3
  • 已保存回复3
  • 发布时间2025/7/19 12:23
  • 上次更新2025/7/19 17:38:20
查看原帖
线段树求调
1047550
likejie楼主2025/7/19 12:23
#include <bits/stdc++.h>
using namespace std;
const int N = 5e5 + 10;
int n, m, a[N];
struct node {
    int l, r, val;
} e[N << 2];
void build(int l, int r, int i) {
    e[i].l = l;
    e[i].r = r;
    if (l == r) {
        e[i].val = a[l];
        return;
    }
    int mid = (l + r) >> 1;
    build(l, mid, i << 1), build(mid + 1, r, i << 1 | 1);
    e[i].val = e[i << 1].val + e[i << 1 | 1].val;
}
int query(int l, int r, int i) { 
    if (e[i].l >= l && e[i].r <= r) {
        return e[i].val;
    }
    int mid = (e[i].l + e[i].r) >> 1;
    if (r <= mid) {
        return query(l, r, i << 1);
    } else if (l > mid) {
        return query(l, r, i << 1 | 1);
    } else {
        return query(l, mid, i << 1) + query(mid + 1, r, i << 1 | 1);
    }
}
int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    for (int i = 1; i < 2; i++) cin >> a[i];
    build(1, 2, 1);
    int x = 1,y = 2;
    cout << query(x, y, 0) << '\n';
    return 0;
}
2025/7/19 12:23
加载中...