敌兵布阵 HDU - 1166

多组输入,注意清除tr数组

维护一个前缀数组,耗时有点大

  1. #include <cstdio>
  2. #include <cstring>
  3. using namespace std;
  4. const int maxn = 5e4 + 5;
  5. int t, n;
  6. int sum[maxn], num[maxn];
  7. char str[10];
  8. int main() {
  9. // freopen("in.txt", "r", stdin);
  10. scanf("%d", &t);
  11. for (int kase = 1; kase <= t; kase++) {
  12. memset(sum, 0, sizeof(sum));
  13. scanf("%d", &n);
  14. for (int i = 1; i <= n; i++) {
  15. scanf("%d", num + i);
  16. sum[i] = sum[i - 1] + num[i];
  17. }
  18. int a, b;
  19. printf("Case %d:\n", kase);
  20. while (scanf("%s", str) && str[0] != 'E') {
  21. scanf("%d%d", &a, &b);
  22. if (str[0] == 'Q') {
  23. int res = sum[b] - sum[a - 1];
  24. printf("%d\n", res);
  25. continue;
  26. }
  27. else if (str[0] == 'A') {
  28. for (int i = a; i <= n; i++) {
  29. sum[i] += b;
  30. }
  31. }
  32. else if (str[0] == 'S') {
  33. for (int i = a; i <= n; i++) {
  34. sum[i] -= b;
  35. }
  36. }
  37. }
  38. }
  39. return 0;
  40. }

树状数组模板

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define sc(n) scanf("%c",&n)
  4. #define sd(n) scanf("%d",&n)
  5. #define pd(n) printf("%d\n", (n))
  6. #define sdd(n,m) scanf("%d %d",&n,&m)
  7. #define sddd(n,m,z) scanf("%d %d %d",&n,&m,&z)
  8. #define pdd(n,m) printf("%d %d\n",n, m)
  9. #define ms(a,b) memset(a,b,sizeof(a))
  10. #define mod(x) ((x)%MOD)
  11. #define lowbit(x) (x & (-x))
  12. typedef long long ll;
  13. typedef pair<int, int> PII;
  14. typedef vector<int> VI;
  15. typedef vector<string> VS;
  16. const int MOD = 10000007;
  17. const int inf = 0x3f3f3f3f;
  18. const int maxn = 5e5 + 100;
  19. int n, tr[maxn], t;
  20. void update(int x, int val) {
  21. while (x <= n) {
  22. tr[x] += val;
  23. x += lowbit(x);
  24. }
  25. }
  26. int getsum(int x) {
  27. int res = 0;
  28. while (x) {
  29. res += tr[x];
  30. x -= lowbit(x);
  31. }
  32. return res;
  33. }
  34. int main() {
  35. //freopen("in.txt", "r", stdin);
  36. //ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
  37. int N; cin >> N;
  38. for (int K = 1; K <= N; ++K) {
  39. ms(tr, 0);
  40. cin >> n;
  41. for (int i = 1; i <= n; ++i)cin >> t, update(i, t);
  42. printf("Case %d:\n", K);
  43. string s; int a, b;
  44. while (cin >> s && s != "End") {
  45. cin >> a >> b;
  46. if (s == "Query")cout << getsum(b) - getsum(a - 1) << endl;
  47. if (s == "Add") update(a, b);
  48. if (s == "Sub") update(a, -b);
  49. }
  50. }
  51. return 0;
  52. }

线段树

  1. #include <cstdio>
  2. #include <iostream>
  3. #include <algorithm>
  4. #include <cstring>
  5. using namespace std;
  6. typedef long long LL;
  7. typedef pair<int, int> pii;
  8. const int maxn = 2e5 + 5;
  9. const int INF = 0x3f3f3f3f;
  10. int sum[maxn * 4], A[maxn];
  11. void PushUp(int rt) {
  12. sum[rt] = sum[rt * 2] + sum[rt * 2 + 1];
  13. }
  14. void Build(int l, int r, int rt) {
  15. if (l == r) {
  16. sum[rt] = A[l];
  17. return;
  18. }
  19. int m = (l + r) / 2;
  20. Build(l, m, rt * 2);
  21. Build(m + 1, r, rt * 2 + 1);
  22. PushUp(rt);
  23. }
  24. void Update(int L, int c, int l, int r, int rt) {
  25. if (r == l) {
  26. sum[rt] += c;
  27. return;
  28. }
  29. int m = (l + r) / 2;
  30. if (L <= m) Update(L, c, l, m, rt * 2);
  31. else Update(L, c, m + 1, r, rt * 2 + 1);
  32. PushUp(rt);
  33. }
  34. int Query(int L, int R, int l, int r, int rt) {
  35. if (L <= l && r <= R) {
  36. return sum[rt];
  37. }
  38. int m = (l + r) / 2;
  39. int ans = 0;
  40. if (L <= m) ans += Query(L, R, l, m, rt * 2);
  41. if (R > m) ans += Query(L, R, m + 1, r, rt * 2 + 1);
  42. return ans;
  43. }
  44. int main() {
  45. // freopen("in.txt", "r", stdin);
  46. char c;
  47. int T;
  48. int n, m, a, b;
  49. char str[10];
  50. scanf("%d", &T);
  51. for (int kase = 1; kase <= T; kase++) {
  52. printf("Case %d:\n", kase);
  53. scanf("%d", &n);
  54. memset(sum, 0, sizeof(sum));
  55. memset(A, 0, sizeof(A));
  56. for (int i = 1; i <= n; i++) scanf("%d", A + i);
  57. Build(1, n, 1);
  58. while (scanf("%s", str) && str[0] != 'E') {
  59. scanf("%d%d", &a, &b);
  60. if (str[0] == 'Q') {
  61. printf("%d\n", Query(a, b, 1, n, 1));
  62. }
  63. else if (str[0] == 'A') {
  64. Update(a, b, 1, n, 1);
  65. }
  66. else if (str[0] == 'S') {
  67. Update(a, -b, 1, n, 1);
  68. }
  69. }
  70. }
  71. return 0;
  72. }

HDU--1166--单点更新的更多相关文章

  1. HDU 1166 单点更新,区间求和

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  2. hdu 1166 (单点更新+区间求和+裸题)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submissi ...

  3. hdu 1754 单点更新

    题意:很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少.这让很多学生很反感.不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问.当然,老师 ...

  4. HDU 2795 单点更新,区间优先查找(想法)

    Billboard Time Limit: 20000/8000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  5. HDU 1754 单点更新,求区间最大值

    I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  6. hdu 1754(单点更新 ,区间最大值)

    I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  7. 敌兵布阵 HDU - 1166 - 单点修改,区间查询:树状数组/线段树

    C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况.由于 ...

  8. 线段树(单点更新and成段更新)

    线段树需要的空间. 区间为1-->n 假设是一棵完全二叉树,且树高为i. 完全二叉树性质:第i层最多有2^(i-1)个结点. 那么 2^(i-1) = n;     i = log2(n)  + ...

  9. HDU 1166 敌兵布阵(线段树单点更新,板子题)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  10. HDU.1166 敌兵布阵 (线段树 单点更新 区间查询)

    HDU.1166 敌兵布阵 (线段树 单点更新 区间查询) 题意分析 加深理解,重写一遍 代码总览 #include <bits/stdc++.h> #define nmax 100000 ...

随机推荐

  1. Python输入一行字符,分别统计出其中大小写英文字母、空格、数字和其它字符的个数。

    import string def SlowSnail(s): up = 0 low = 0 space = 0 digit = 0 others = 0 for c in s: if c.isupp ...

  2. python函数str()避免类型错误

    python中当输出需要拼接字符串(char)和整数(int)时,需要用到str()函数 如果编写如下代码: age = 23 print("Happy " + age +&quo ...

  3. Gmail 发送邮件报警

    亲测好使 import smtplib import email.mime.text import time # my test mail mail_username = 'XXXXXXXXXXX@g ...

  4. 通用串口modbus转PROFIBUS DP网关PM-160在汽车行业的应用案例

    通用串口modbus转PROFIBUS DP网关PM-160在汽车行业的应用案例 摘要: PM-160 是泗博公司生产的,可以实现串口与 PROFIBUS DP 协议数据通信的网关.此案例讲述的是通过 ...

  5. 【uniapp】【外包杯】学习笔记day08 | 初具雏形+后期任务

    总的来说就是BBQ了,基本上前后端都有了阶段性成果,但是问题在于是否符合我们题目的要求,所以也需要进行很详细的改动,其次就是小程序的支付功能以及登录功能1还有具体配置还是不太行. 然后下载的sprin ...

  6. 【python】无法安装pip,报错ImportError: No module named 'pip'解决方案

    命令提示符输入以下代码即可 python -m ensurepip

  7. [ABC267F] Exactly K Steps

    Problem Statement You are given a tree with $N$ vertices. The vertices are numbered $1, \dots, N$, a ...

  8. Codeforces Round #426 (Div. 2) problem C

    C. The Meaningless Game time limit per test 1 second memory limit per test 256 megabytes input stand ...

  9. 【笔记整理】请求携带cookie的两种方法

    """ 方法一:在请求头header中携带Cookie请求头信息(因为本身Cookie就是用请求头传递的....) 方法二:使用cookie参数传递cookie字典 &q ...

  10. C++ Qt开发:Charts绘图组件概述

    Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍QCharts ...