zoukankan      html  css  js  c++  java
  • hdu 4027 Can you answer these queries?

    http://acm.hdu.edu.cn/showproblem.php?pid=4027

    x可能比y大。 区间的每一个数在经过几次开方之后会变成1之后,在这个区间全部变成1之后,这个区间不用向下更新。这里可以判断一下。。

      1 #include <cstdio>
      2 #include <cstring>
      3 #include <cmath>
      4 #include <algorithm>
      5 #define maxn 100010
      6 #define ll __int64
      7 using namespace std;
      8 
      9 ll a[maxn];
     10 int n,m;
     11 int op,x,y;
     12 struct node
     13 {
     14     int l,r;
     15     ll sum;
     16 }tree[maxn*4];
     17 
     18 void build(int i,int l,int r)
     19 {
     20     tree[i].l=l;
     21     tree[i].r=r;
     22     if(l==r)
     23     {
     24         tree[i].sum=a[l];
     25         return ;
     26     }
     27     int mid=(l+r)>>1;
     28     build(i<<1,l,mid);
     29     build(i<<1|1,mid+1,r);
     30     tree[i].sum=tree[i<<1].sum+tree[i<<1|1].sum;
     31 }
     32 
     33 void update(int i,int l,int r)
     34 {
     35     if(tree[i].l==l&&tree[i].r==r&&tree[i].sum==tree[i].r-tree[i].l+1) return;
     36     if(tree[i].l==tree[i].r)
     37     {
     38         tree[i].sum=sqrt(tree[i].sum*1.0);
     39         return ;
     40     }
     41     int mid=(tree[i].l+tree[i].r)>>1;
     42     if(r<=mid)
     43     {
     44         update(i<<1,l,r);
     45     }
     46     else if(l>mid)
     47     {
     48         update(i<<1|1,l,r);
     49     }
     50     else
     51     {
     52         update(i<<1,l,mid);
     53         update(i<<1|1,mid+1,r);
     54     }
     55     tree[i].sum=tree[i<<1].sum+tree[i<<1|1].sum;
     56 }
     57 
     58 ll search1(int i,int l,int r)
     59 {
     60     if(tree[i].l==l&&tree[i].r==r)
     61     {
     62         return tree[i].sum;
     63     }
     64     int mid=(tree[i].l+tree[i].r)>>1;
     65     if(r<=mid)
     66     {
     67         return search1(i<<1,l,r);
     68     }
     69     else if(l>mid)
     70     {
     71         return search1(i<<1|1,l,r);
     72     }
     73     else
     74     {
     75         return search1(i<<1,l,mid)+search1(i<<1|1,mid+1,r);
     76     }
     77 }
     78 
     79 
     80 int main()
     81 {
     82     int cas=1;
     83     while(scanf("%d",&n)!=EOF)
     84     {
     85         for(int i=1; i<=n; i++)
     86         {
     87             scanf("%I64d",&a[i]);
     88         }
     89         build(1,1,n);
     90         scanf("%d",&m);
     91         printf("Case #%d:
    ",cas);
     92         cas++;
     93         for(int i=1; i<=m; i++)
     94         {
     95             scanf("%d%d%d",&op,&x,&y);
     96             if(x>y) swap(x,y);
     97             if(op==0)
     98             {
     99                 update(1,x,y);
    100             }
    101             else if(op==1)
    102             {
    103                 printf("%I64d
    ",search1(1,x,y));
    104             }
    105         }
    106         printf("
    ");
    107     }
    108     return 0;
    109 }
    View Code
  • 相关阅读:
    个人作业-Alpha项目测试
    第三次作业
    第二次作业
    第一次作业
    JQuery(一)页面加载,写入文本,对象转换,隐藏显示,基本选择器,层级选择器,基本过滤选择器,表单选择器,class操作,属性操作
    JavaScript(二)
    轮辐广告、简单选项卡
    div层随着页面大小变化相对位置不变、按钮隐藏一半鼠标放上去就出来,不放上去就退回去
    markDown语法详解
    Mybatis中动态SQL语句
  • 原文地址:https://www.cnblogs.com/fanminghui/p/3916503.html
Copyright © 2011-2022 走看看