zoukankan      html  css  js  c++  java
  • 【HDU】4027 Can you answer these queries?

     1 #include<cstdio>
     2 #include<cmath>
     3 typedef __int64 LL;
     4 #define EPS 1e-9
     5 #define MAXN 100010
     6 struct node
     7 {
     8     LL sum;
     9     int flag;
    10 };
    11 node tree[MAXN<<2];
    12 inline void PushUp(int rt)
    13 {
    14     tree[rt].flag=tree[rt<<1].flag&tree[rt<<1|1].flag;
    15     tree[rt].sum=tree[rt<<1].sum+tree[rt<<1|1].sum;
    16 }
    17 void Build(int L,int R,int rt)
    18 {
    19     if(L==R)
    20     {
    21         scanf("%I64d",&tree[rt].sum);
    22         if(tree[rt].sum==1)
    23             tree[rt].flag=1;
    24         else
    25             tree[rt].flag=0;
    26     }
    27     else
    28     {
    29         int mid=(L+R)>>1;
    30         Build(L,mid,rt<<1);
    31         Build(mid+1,R,rt<<1|1);
    32         PushUp(rt);
    33     }
    34 }
    35 LL Query(int x,int y,int L,int R,int rt)
    36 {
    37     if(x<=L&&R<=y)
    38         return tree[rt].sum;
    39     int mid=(L+R)>>1;
    40     LL ans=0;
    41     if(mid>=x)
    42         ans+=Query(x,y,L,mid,rt<<1);
    43     if(y>mid)
    44         ans+=Query(x,y,mid+1,R,rt<<1|1);
    45     return ans;
    46 }
    47 void Update(int x,int y,int L,int R,int rt)
    48 {
    49     if(tree[rt].flag)
    50         return;
    51     if(L==R)
    52     {
    53         tree[rt].sum=(LL)(sqrt((double)tree[rt].sum)+EPS);
    54         if(tree[rt].sum==1)
    55             tree[rt].flag=1;
    56         else
    57             tree[rt].flag=0;
    58     }
    59     else
    60     {
    61         int mid=(L+R)>>1;
    62         if(mid>=x)
    63             Update(x,y,L,mid,rt<<1);
    64         if(y>mid)
    65             Update(x,y,mid+1,R,rt<<1|1);
    66         PushUp(rt);
    67     }
    68 }
    69 inline void swap(int &x,int &y)
    70 {
    71     int temp=x;
    72     x=y;
    73     y=temp;
    74 }
    75 int main()
    76 {
    77     int n,q,t,x,y,ca=1;
    78     while(~scanf("%d",&n))
    79     {
    80         Build(1,n,1);
    81         scanf("%d",&q);
    82         printf("Case #%d:\n",ca++);
    83         while(q--)
    84         {
    85             scanf("%d%d%d",&t,&x,&y);
    86             if(x>y)
    87                 swap(x,y);
    88             if(t)
    89                 printf("%I64d\n",Query(x,y,1,n,1));
    90             else
    91                 Update(x,y,1,n,1);
    92         }
    93         putchar('\n');
    94     }
    95     return 0;
    96 }
    新博客:www.zhixiangli.com
  • 相关阅读:
    python
    基于vue的npm发包
    div实现水平垂直居中
    element-ui中表格添加fixed定位列后 出现表格错位现象
    解决github经常无法访问的问题
    快排算法C语言实现
    ubuntu下qt运行时/usr/bin/ld: cannot find -lGL
    llinux装完qt 启动qtcreator报错
    LINUX权限-bash: ./startup.sh: Permission denied
    In short, don’t use a pointer to a string literal if you plan to alter the string.
  • 原文地址:https://www.cnblogs.com/DrunBee/p/2530512.html
Copyright © 2011-2022 走看看