zoukankan      html  css  js  c++  java
  • hihocoder1070、1077线段树更新点查询区间

    题目链接:http://hihocoder.com/problemset/problem/1070

        http://hihocoder.com/problemset/problem/1077

    我的代码:

     1 #include <cstdio>
     2 #include <algorithm>
     3 
     4 using namespace std;
     5 
     6 #define MAXN 1000005
     7 
     8 int w[MAXN];
     9 
    10 struct segNode
    11 {
    12     int left, right, minw;
    13 };
    14 
    15 struct segTree
    16 {
    17     segNode t[4*MAXN];
    18     void build(int i, int l, int r)
    19     {
    20         t[i].left = l;
    21         t[i].right = r;
    22         if(l<r)
    23         {
    24             int m = (l+r)/2;
    25             build(2*i, l, m);
    26             build(2*i+1, m+1, r);
    27             t[i].minw = min(t[2*i].minw, t[2*i+1].minw);
    28         }
    29         else t[i].minw = w[l];
    30     }
    31     int query(int i, int l, int r)
    32     {
    33         if(t[i].left==l&&t[i].right==r) return t[i].minw;
    34         int m = (t[i].left+t[i].right)/2;
    35         if(l>m) return query(2*i+1, l, r);
    36         if(r<=m) return query(2*i, l, r);
    37         return min(query(2*i, l, m), query(2*i+1, m+1, r));
    38     }
    39     void update(int i, int id, int v)
    40     {
    41         if(t[i].left==t[i].right) t[i].minw = v;
    42         else
    43         {
    44             int m = (t[i].left+t[i].right)/2;
    45             if(id<=m) update(2*i, id, v);
    46             else update(2*i+1, id, v);
    47             t[i].minw = min(t[2*i].minw, t[2*i+1].minw);
    48         }
    49     }
    50 }tree;
    51 
    52 int main()
    53 {
    54     int n, q;
    55     while(scanf("%d", &n)!=EOF)
    56     {
    57         for(int i=1; i<=n; ++i) scanf("%d", &w[i]);
    58         tree.build(1, 1, n);
    59         scanf("%d", &q);
    60         while(q--)
    61         {
    62             int op, a, b;
    63             scanf("%d%d%d", &op, &a, &b);
    64             if(op)  tree.update(1, a, b);
    65             else    printf("%d
    ", tree.query(1, a, b));
    66         }
    67     }
    68     return 0;
    69 }
  • 相关阅读:
    高德地图SDK大致使用
    AFNetworking 使用
    蓝牙相关
    svn 常用命令
    通过AutoLayout显示三个等宽视图
    适配相关 --AutoLayout ---SizeClass
    常用网页
    UIViewController加载过程
    UIApplication相关
    实现消息转发功能(调用非自己类方法)
  • 原文地址:https://www.cnblogs.com/pczhou/p/4297382.html
Copyright © 2011-2022 走看看