zoukankan      html  css  js  c++  java
  • codevs1081 线段树练习 2

    #include <stdio.h>
    #include <algorithm>
    #include <cstring>
    #include <cmath>
    #define inf 100000000
    using namespace std;
    const int maxn=100000+10;
    int n,a[maxn],q;
    struct Tree
    {
      int val,mark;
    }tree[maxn*3];
    void build(int root,int arr[],int istart,int iend)
    {
      if(istart==iend)
      {
        tree[root].val=arr[istart];
        return;    
      }
      int mid=(istart+iend)>>1;
      build(root<<1,arr,istart,mid);
      build(root<<1|1,arr,mid+1,iend);
      return;
    }
    void pushdown(int root)
    {
      if(tree[root].mark)
      {
          tree[root<<1].val+=tree[root].mark;
          tree[root<<1|1].val+=tree[root].mark;
          tree[root<<1].mark+=tree[root].mark;
          tree[root<<1|1].mark+=tree[root].mark;
          tree[root].mark=0;
      }
      return;
    }
    void updata(int root,int ul,int ur,int nl,int nr,int val)
    {
      if(ul>nr||ur<nl)return;
      if(nl>=ul&&nr<=ur)
      {
          tree[root].val+=val;
        tree[root].mark+=val;
          return;
      }
      pushdown(root);
      int mid=(nl+nr)>>1;
      updata(root<<1,ul,ur,nl,mid,val);
      updata(root<<1|1,ul,ur,mid+1,nr,val);
    }
    int query(int root,int ql,int qr,int nl,int nr)
    {
      if(ql>nr||qr<nl)return inf;
      if(nl>=ql&&nr<=qr)return tree[root].val;
      pushdown(root);
      int mid=(nl+nr)>>1;
      return min(query(root<<1,ql,qr,nl,mid),query(root<<1|1,ql,qr,mid+1,nr));
    }
    int main()
    {
      scanf("%d",&n);
      for(int i=1;i<=n;i++)scanf("%d",&a[i]);
      build(1,a,1,n);
      scanf("%d",&q);
      int a,b,x,t;
      for(int i=1;i<=q;i++)
      {
          scanf("%d",&t);
          if(t==1)
          {
          scanf("%d%d%d",&a,&b,&t);
          updata(1,a,b,1,n,t);
        }
        else
        {
          scanf("%d",&a);
          printf("%d
    ",query(1,a,a,1,n));
        }
      }
      return 0;
    }
    View Code
  • 相关阅读:
    HTML链接/实施CSS的三种方法
    XML之Well-Formed文档规则
    【摘】SVN提交与版本冲突
    Web开发之404小结
    TCP 连接的要点
    [转] Epoll 相对Poll和Select的优点
    [转] 剖析 epoll ET/LT 触发方式的性能差异误解(定性分析)
    GDB调试技巧
    [转] 关于c++的头文件依赖
    [转] Linux中gcc,g++常用编译选项
  • 原文地址:https://www.cnblogs.com/new-hand/p/7745511.html
Copyright © 2011-2022 走看看