zoukankan      html  css  js  c++  java
  • hdu1166 敌兵布阵 树状数组/线段树

    数列的单点修改、区间求和

    树状数组或线段树入门题

     1 #include<stdio.h>
     2 #include<string.h>
     3 
     4 int c[50005],N;
     5 
     6 void add(int x,int a){
     7     while(x<=N){
     8         c[x]+=a;
     9         x+=(x&-x);
    10     }
    11     return;
    12 }
    13 
    14 int sum(int x){
    15     int t=0;
    16     while(x){
    17         t+=c[x];
    18         x-=(x&-x);
    19     }
    20     return t;
    21 }
    22 
    23 int main(){
    24     int T;
    25     while(scanf("%d",&T)!=EOF){
    26         for(int q=1;q<=T;q++){
    27             printf("Case %d:
    ",q);
    28             memset(c,0,sizeof(c));
    29             scanf("%d",&N);
    30             int i,t;
    31             for(i=1;i<=N;i++){
    32                 scanf("%d",&t);
    33                 add(i,t);
    34             }
    35             char s[10];
    36             while(scanf("%s",s)){
    37             //    printf("%s
    ",s);
    38                 if(s[0]=='S'){
    39                     scanf("%d%d",&i,&t);
    40                     add(i,-t);
    41                 }
    42                 else if(s[0]=='A'){
    43                     scanf("%d%d",&i,&t);
    44                     add(i,t);
    45                 }
    46                 else if(s[0]=='Q'){
    47                     scanf("%d%d",&i,&t);
    48                     printf("%d
    ",sum(t)-sum(i-1));
    49                 }
    50                 else if(s[0]=='E')break;
    51             }
    52         }
    53     }
    54     return 0;
    55 }
    树状数组
     1 #include<stdio.h>
     2 #include<string.h>
     3 const int maxm=50005;
     4 
     5 char s[10];
     6 int a[maxm],st[maxm<<2];
     7 
     8 void build(int o,int l,int r){
     9     if(l==r){
    10         st[o]=a[l];
    11         return;
    12     }
    13     int m=l+((r-l)>>1);
    14     build(o<<1,l,m);
    15     build(o<<1|1,m+1,r);
    16     st[o]=st[o<<1]+st[o<<1|1];
    17 }
    18 
    19 void update(int o,int l,int r,int x,int c){
    20     if(l==r){
    21         st[o]+=c;
    22         return;
    23     }
    24     int m=l+((r-l)>>1);
    25     if(x<=m)update(o<<1,l,m,x,c);
    26     if(x>=m+1)update(o<<1|1,m+1,r,x,c);
    27     st[o]=st[o<<1]+st[o<<1|1];
    28 }
    29 
    30 int query(int o,int l,int r,int ql,int qr){
    31     if(ql<=l&&qr>=r)return st[o];
    32     int m=l+((r-l)>>1);
    33     int ans=0;
    34     if(ql<=m)ans+=query(o<<1,l,m,ql,qr);
    35     if(qr>=m+1)ans+=query(o<<1|1,m+1,r,ql,qr);
    36     return ans;
    37 }
    38 
    39 int read(){
    40     int x=0;
    41     char c=getchar();
    42     while(c>'9'||c<'0')c=getchar();
    43     while(c>='0'&&c<='9'){
    44         x=x*10+c-'0';
    45         c=getchar();
    46     }
    47     return x;
    48 }
    49 
    50 
    51 int main(){
    52     int T=read();
    53     for(int q=1;q<=T;q++){
    54         int n=read();
    55         int i;
    56         for(i=1;i<=n;i++)a[i]=read();
    57         build(1,1,n);
    58         printf("Case %d:
    ",q);
    59         while(1){
    60             scanf("%s",s);
    61             if(s[0]=='Q'){
    62                 int ql=read();
    63                 int qr=read();
    64                 printf("%d
    ",query(1,1,n,ql,qr));
    65             }
    66             else if(s[0]=='A'){
    67                 int x=read();
    68                 int c=read();
    69                 update(1,1,n,x,c);
    70             }
    71             else if(s[0]=='S'){
    72                 int x=read();
    73                 int c=read();
    74                 update(1,1,n,x,-c);
    75             }
    76             else if(s[0]=='E')break;
    77         }
    78     }
    79     return 0;
    80 }
    线段树
  • 相关阅读:
    [转]C# 中使用System.Net.Http.HttpClient 模拟登录博客园
    FastReport.NET 学习笔记--子分组添加事件无效的问题
    FastReport.NET 学习笔记--VS2010工具箱找不到fastreport的问题
    关于C#静态方法调用问题
    单链表——带头节点
    线性表——顺序存储结构
    重新出发
    ThreadPoolExecutor源码学习(1)-- 主要思路
    ThreadPoolExecutor源码学习(2)-- 在thrift中的应用
    [译]Cassandra的数据读写与压缩
  • 原文地址:https://www.cnblogs.com/cenariusxz/p/6578330.html
Copyright © 2011-2022 走看看