• 【HDU 1754】 I Hate It


    【题目链接】

               点击打开链接

    【算法】

              树状数组的最值查询

              详见这篇文章 : https://blog.csdn.net/u010598215/article/details/48206959

    【代码】

               

    #include<bits/stdc++.h>
    using namespace std;
    #define MAXN 200000
    
    int i,N,M,x,y,b;
    int a[MAXN+10];
    char opt;
    
    template <typename T> inline void read(T &x) {
          int f = 1; x = 0;
          char c = getchar();
          for (; !isdigit(c); c = getchar()) { if (c == '-') f = -f; }
          for (; isdigit(c); c = getchar()) x = (x << 3) + (x << 1) + c - '0';
          x *= f;
    }
    
    template <typename T> inline void write(T x) {
        if (x < 0) { putchar('-'); x = -x; }
        if (x > 9) write(x/10);
        putchar(x%10+'0');
    }
    
    template <typename T> inline void writeln(T x) {
        write(x);
        puts("");
    }
    
    struct BinaryIndexedTree {
          int bit[MAXN+10];
          inline int lowbit(int x) { return x & -x; }
          inline void clear() {
                int i;
              for (i = 1; i <= N; i++) bit[i] = 0;
          }
          inline void modify(int pos,int val) {
              int i,j,t;
              for (i = pos; i <= N; i += lowbit(i)) {
                  bit[i] = a[i];
                  t = lowbit(i);
                  for (j = 1; j < t; j <<= 1) bit[i] = max(bit[i],bit[i-j]);
              }
            }
            inline int query(int l,int r) {
              int ret = 0;
              while (r >= l) {
                  if (r - lowbit(r) < l) { 
                      ret = max(ret,a[r]);
                      r--;
                      continue;
                  }
                  while (r - lowbit(r) >= l) {
                      ret = max(ret,bit[r]);
                      r -= lowbit(r);
                  }
              }
              return ret;
            }
    } BIT;
    
    int main() {
            
          while (scanf("%d%d",&N,&M) != EOF) {
              BIT.clear();
              for (i = 1; i <= N; i++) {
                  read(a[i]);
                  BIT.modify(i,a[i]);    
              }
              while (M--) {
                  opt = getchar();
                  if (opt == 'U')    {
                      read(x); read(b);
                      a[x] = b;
                      BIT.modify(x,b);
                  } else {
                      read(x); read(y);
                      writeln(BIT.query(x,y));
                  }
              }
          }
          
          return 0;
    }
  • 相关阅读:
    SQL基础用法(实例二)
    SQL基础用法(实例一)
    CentOS 7下修改rabbitmq打开文件数量方法
    CentOS7下安装RabbitMQ
    zabbix 监控zookeeper
    使用Zabbix监控ZooKeeper服务的健康状态
    rabbitmq最大连接数(Socket Descriptors)
    zabbix如何添加主机监控
    Ubuntu下Zabbix服务器监控工具部署
    Ubuntu14.04 x64 zabbix 3.0 安装
  • 原文地址:https://www.cnblogs.com/evenbao/p/9196386.html
Copyright © 2020-2023  润新知