• bzoj3211 花神游历各国


    题目链接

    双倍经验题

    同:bzoj3038

    只不过本题须开long long 

     1 #include<algorithm>
     2 #include<iostream>
     3 #include<cstdlib>
     4 #include<cstring>
     5 #include<cstdio>
     6 #include<string>
     7 #include<cmath>
     8 #include<ctime>
     9 #include<queue>
    10 #include<stack>
    11 #include<map>
    12 #include<set>
    13 #define rre(i,r,l) for(int i=(r);i>=(l);i--)
    14 #define re(i,l,r) for(int i=(l);i<=(r);i++)
    15 #define Clear(a,b) memset(a,b,sizeof(a))
    16 #define inout(x) printf("%d",(x))
    17 #define douin(x) scanf("%lf",&x)
    18 #define strin(x) scanf("%s",(x))
    19 #define LLin(x) scanf("%lld",&x)
    20 #define op operator
    21 #define CSC main
    22 typedef unsigned long long ULL;
    23 typedef const int cint;
    24 typedef long long LL;
    25 using namespace std;
    26 void inin(int &ret)
    27 {
    28     ret=0;int f=0;char ch=getchar();
    29     while(ch<'0'||ch>'9'){if(ch=='-')f=1;ch=getchar();}
    30     while(ch>='0'&&ch<='9')ret*=10,ret+=ch-'0',ch=getchar();
    31     ret=f?-ret:ret;
    32 }
    33 LL sum[400010];
    34 int l[400010],r[400010],bo[400040];
    35 int n,m,a[100010];
    36 void build(int k,int ll,int rr)
    37 {
    38     l[k]=ll,r[k]=rr;
    39     if(ll==rr){sum[k]=a[ll];if(sum[k]==0||sum[k]==1)bo[k]=1;return ;}
    40     int mid=(ll+rr)>>1;
    41     build(k<<1,ll,mid);
    42     build(k<<1|1,mid+1,rr);
    43     sum[k]=sum[k<<1]+sum[k<<1|1],bo[k]=bo[k<<1]&bo[k<<1|1];
    44 }
    45 LL query(int k,int ll,int rr)
    46 {
    47     if(l[k]>=ll&&r[k]<=rr)return sum[k];
    48     int mid=(l[k]+r[k])>>1;
    49     if(rr<=mid)return query(k<<1,ll,rr);
    50     if(ll>mid)return query(k<<1|1,ll,rr);
    51     return query(k<<1,ll,rr)+query(k<<1|1,ll,rr);
    52 }
    53 void change(int k,int ll,int rr)
    54 {
    55     if(bo[k])return ;
    56     if(l[k]==r[k]){sum[k]=sqrt(sum[k]);if(sum[k]==0||sum[k]==1)bo[k]=1;return ;}
    57     int mid=(l[k]+r[k])>>1;
    58     if(rr<=mid)change(k<<1,ll,rr);
    59     else if(ll>mid)change(k<<1|1,ll,rr);
    60     else change(k<<1,ll,rr),change(k<<1|1,ll,rr);
    61     sum[k]=sum[k<<1]+sum[k<<1|1],bo[k]=bo[k<<1]&bo[k<<1|1];
    62 }
    63 int CSC()
    64 {
    65     inin(n);
    66     re(i,1,n)inin(a[i]);
    67     build(1,1,n);
    68     inin(m);
    69     re(i,1,m)
    70     {
    71         int opt,aa,bb;inin(opt),inin(aa),inin(bb);
    72         if(opt==1)printf("%lld
    ",query(1,aa,bb));
    73         else change(1,aa,bb);
    74     }
    75     return 0;
    76 }
  • 相关阅读:
    光线投射算法与光线跟踪算法
    体绘制(Volume Rendering)概述之4:光线投射算法(Ray Casting)实现流程和代码(基于CPU的实现)
    体绘制(Volume Rendering)概述之3:光线投射算法(Ray Casting)原理和注意要点(强烈推荐呀,讲的很好)
    PCL学习笔记二:Registration (ICP算法)
    局部坐标系和全局坐标系
    Kinect for Windows SDK开发入门(十九):Kinect Fusion
    谈谈论文级别
    在Linux中搭建一个FTP服务器
    Java 编程实践
    Oracle数据库查询语句
  • 原文地址:https://www.cnblogs.com/HugeGun/p/5151152.html
Copyright © 2020-2023  润新知