zoukankan      html  css  js  c++  java
  • 【线段树】【HUD1166】【模板题】敌兵布阵

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166

    线段树模板题(然而模板题也阻挡不住我不会的脚步···)

    寒假的时候也只是简单入门,现在又给忘光了,一点都不会了,没办法,只能找一道模板题来参考别人代码写,然后改代码。(这个不是好习惯,只是我这也学更快一些,不适用所有人)

    只有最简单的区间增减与区间查询

     1 #include <iostream>
     2 #include <cstring>
     3 #include <cstdio>
     4 #include <algorithm>
     5 
     6 using namespace std;
     7 
     8 #define N 100001
     9 #define INF 0x7fffffff
    10 
    11 int num[N];
    12 struct node 
    13 {
    14     int l,r;
    15     int sum;
    16     int mid()
    17     {
    18         return (l+r)/2;
    19     }
    20 }tree[N*4];
    21 
    22 void BuildTree(int root,int l,int r)
    23 {
    24     tree[root].l = l;
    25     tree[root].r = r;
    26     if(l == r)
    27     {
    28         tree[root].sum = num[l];
    29         return ;
    30     }
    31     BuildTree(root*2,l,(l+r)/2);
    32     BuildTree(root*2+1,(l+r)/2+1,r);
    33     tree[root].sum = tree[root*2].sum+tree[root*2+1].sum;
    34 }
    35 
    36 // root:根节点   i:修改的点   t:改变的值(正为增负为减)
    37 void add(int root,int i,int t)
    38 {
    39     tree[root].sum += t;
    40     if(tree[root].l == i && tree[root].r == i)
    41         return ;
    42     if(i <= tree[root].mid())
    43         add(root*2,i,t);
    44     else
    45         add(root*2+1,i,t);
    46 }
    47 
    48 // root:根节点    s:start    e:end
    49 int query(int root,int s,int e)
    50 {
    51     if(tree[root].l == s && tree[root].r == e)
    52         return tree[root].sum;
    53     if(e <= tree[root].mid())
    54         return query(root*2,s,e);
    55     else
    56         if(s > tree[root].mid())
    57             return query(root*2+1,s,e);
    58         else
    59             return query(root*2,s,tree[root].mid())+query(root*2+1,tree[root].mid()+1,e);
    60 }
    61 
    62 int main()
    63 {
    64     int ca = 1;
    65     int T,n,i,k,t;
    66     string s;
    67     cin >>  T;
    68     while(T--)
    69     {
    70         printf("Case %d:
    ",ca++);
    71         cin >> n;
    72         for(i = 1;i <= n;i++)
    73             scanf("%d",&num[i]);
    74         BuildTree(1,1,n);
    75         while(cin >> s)
    76         {
    77             if(s == "End")
    78                 break;
    79             scanf("%d %d",&k,&t);
    80             if(s == "Add")
    81                 add(1,k,t);
    82             else
    83             {
    84                 if(s == "Sub")
    85                     add(1,k,-t);
    86                 else
    87                     cout << query(1,k,t) << endl;
    88             }
    89         }
    90     } 
    91     return 0;
    92 }
    文章搬运自我的个人博客http://duny31030.top 原博客为静态博客,因备份丢失无法继续更新,所以又搬运回博客园,可能部分文章阅读体验不好,可以到我的静态博客搜索相同标题查看
  • 相关阅读:
    “人工智能”前景:只有人工,没有智能
    google scholar vs baidu scholar-what is your problem
    springSecurity使用
    springMVC中的HttpSession与Model
    mybatis关于Criteria的一点小坑。。。
    MyBatis的Mapper接口以及Example的实例函数及详解
    被springSecurity坑哭的一天
    Mybatis-Generator
    Redis五种数据类型应用场景
    springboot_自动配置原理
  • 原文地址:https://www.cnblogs.com/duny31030/p/8869709.html
Copyright © 2011-2022 走看看