zoukankan      html  css  js  c++  java
  • UESTC--1730

    原题链接:http://acm.uestc.edu.cn/problem.php?pid=1730

    分析:线段树单点更新,区间求和。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cmath>
     5 #include<algorithm>
     6 #define maxn 500005
     7 #define mod 1000007
     8 using namespace std;
     9 int sum[maxn<<2];
    10 int x[maxn];
    11 void build(int l,int r,int rt)
    12 {
    13     if(l==r)
    14     {
    15         sum[rt]=x[l];
    16         return;
    17     }
    18     int m=(l+r)>>1;
    19     build(l,m,rt<<1);
    20     build(m+1,r,rt<<1|1);
    21     sum[rt]=sum[rt<<1]^sum[rt<<1|1];
    22 }
    23 void update(int l,int r,int rt,int ii,int v)
    24 {
    25     if(l==r&&l==ii){
    26         sum[rt]=v;
    27         return;
    28     }
    29     int m=(l+r)>>1;
    30     if(ii<=m)update(l,m,rt<<1,ii,v);
    31     else update(m+1,r,rt<<1|1,ii,v);
    32     sum[rt]=sum[rt<<1]^sum[rt<<1|1];
    33 }
    34 int get_sum(int L,int R,int l,int r,int rt)
    35 {
    36     if(L<=l&&r<=R)return sum[rt];
    37     int m=(l+r)>>1;
    38     int res=0;
    39     if(L<=m)res^=get_sum(L,R,l,m,rt<<1);
    40     if(R>=m+1)res^=get_sum(L,R,m+1,r,rt<<1|1);
    41     return res;
    42 }
    43 int main()
    44 {
    45      int n,m;
    46      cin>>n>>m;
    47      for(int i=1;i<=n;i++)
    48      scanf("%d",&x[i]);
    49      build(1,n,1);
    50      int i,j;char op[2];
    51      while(m--)
    52      {
    53          scanf("%s %d %d",op,&i,&j);
    54          if(op[0]=='Q')
    55          {
    56              printf("%d
    ",get_sum(i,j,1,n,1));
    57          }
    58          else update(1,n,1,i,j);
    59      }
    60     return 0;
    61 }
    View Code
  • 相关阅读:
    构建自己的yara数据库
    Java反序列化漏洞研究
    我喜欢的资源
    jvm-垃圾收集
    jvm-内存
    java设计模式--行为模式
    java设计模式--结构型模式
    java设计模式--简介
    netty之 -- 手写rpc框架
    netty之---核心源码剖析
  • 原文地址:https://www.cnblogs.com/i-love-acm/p/3293198.html
Copyright © 2011-2022 走看看