70 条题解
-
3
新用户推荐http://temege.com/p/1/solution/66a310d55ed1c81f72f96654
这里附一个线段树代码也可AC,推荐使用
#include <bits/stdc++.h> #define int long long using namespace std; const int N = 1e5 + 10; const int INF = 0x3f3f3f3f; struct node { int l , r , num; }tree [N]; int a [N] = {} , n , tag[N]; void ctf (int c) { tree [c].num = tree [(c << 1)].num + tree [(c << 1) + 1].num; } void buildt (int sp , int l , int r) { tree [sp].l = l; tree [sp].r = r; if(l == r) { tree [sp].num = a [l]; return; } int mid = l + r >> 1; buildt ((sp << 1) , l , mid); buildt ((sp << 1) + 1 , mid + 1 , r); ctf (sp); } void f (int sp) { int mid = tree [sp].l + tree [sp].r >> 1; if (tag [sp]) { tree [(sp << 1)].num += tag [sp] * (mid - tree[sp].l + 1); tree [(sp << 1) + 1].num += tag [sp] * (tree [sp].r - mid); tag [(sp << 1)] += tag [sp]; tag [(sp << 1) + 1] += tag [sp]; tag [sp] = 0; } } void def (int sp , int pt , int nn) { if(tree [sp].l == tree [sp].r) { tree [sp].num += nn; return; } int mid = tree [sp].l + tree [sp].r >> 1; if (pt <= mid) def ((sp << 1) , pt , nn); else def((sp << 1) + 1 , pt , nn); ctf (sp); } void init(int sp , int l , int r , int c) { if(tree [sp].l >= l && tree [sp].r <= r) { tree [sp].num += (tree [sp].r - tree [sp].l + 1) * c; tag [sp] += c; return; } f (sp); int mid = tree [sp].l + tree[sp].r >> 1; if (l <= mid) init((sp << 1) , l , r , c); if (mid < r) init((sp << 1) + 1 , l , r , c); ctf (sp); } int answ (int sp , int l , int r) { if (tree [sp].l >= l && tree [sp].r <= r)return tree [sp].num; f (sp); int mid = tree [sp].l + tree [sp].r >> 1; int maxn = 0; if (l <= mid) maxn = maxn + answ ((sp << 1) , l , r); if (mid < r) maxn = maxn + answ ((sp << 1) + 1 , l , r); return maxn; } signed main() { int T = 1; n = 2; for (int i = 1; i <= n; i++) cin >> a [i]; buildt (1 , 1 , 2); cout << answ (1 , 1 , 2); }
信息
- ID
- 1
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 1
- 标签
- 递交数
- 5322
- 已通过
- 1498
- 上传者