zoukankan      html  css  js  c++  java
  • 1369 xth 砍树

    1369 xth 砍树

     

     时间限制: 1 s
     空间限制: 128000 KB
     题目等级 : 钻石 Diamond
     
     
     
    题目描述 Description

    在一个凉爽的夏夜,xth 和 rabbit 来到花园里砍树。为啥米要砍树呢?是这样滴,
    小菜儿的儿子窄森要出生了。Xth这个做伯伯的自然要做点什么。于是他决定带着
    rabbit 去收集一些木材,给窄森做一个婴儿车……(xth 早就梦想着要天天打菜儿
    他儿窄森的小 pp,到时候在婴儿车里安装一个电子遥控手臂,轻轻一按,啪啪
    啪……“乌卡卡——”xth 邪恶滴笑了,“不要告诉 rabbit,她会说我缺德的……”
    xth 如是说)。
    花园里共有n棵树。为了花园的整体形象,rabbit 要求 xth只能在m个区域砍伐,我
    们可以将这m个区域看成m个区间,树的间距相等,都是1,我们将每个区间设为
    [x, y]。那么长度为k的区间中就有k棵树。树木的高度不等。现在 xth 想测量一下,
    每个区间树木砍伐后所得的木材量是多少,而且每次测量后他都会砍下标号为
    (x+y)/2
    的那棵作为纪念。以方便他安排人手。(同一个区间的树木可以重复砍伐,我们认
    为被砍过的树木高度为0)
    每棵树的木材量=树的高度∗ 3.14(注意是3.14不是π)。

    输入描述 Input Description

    第一行,一个整数n。
    第二行,共n个整数,表示每棵树的高度。
    第三行,一个整数m,表示共m个区间。
    以下m行,每个区间[x, y]的左右端点x, y。

    输出描述 Output Description

    共m行,每行一个数,表示每个区间的木材量。

    结果精确到小数点后两位。

    样例输入 Sample Input

    5
    1 2 3 4 5
    2
    1 4
    2 4

    样例输出 Sample Output

    31.40
    21.98

    数据范围及提示 Data Size & Hint

    对于30%的数据,有n ≤ 5000,m ≤ 5000;
    对于100%的数据,有n ≤ 200000,m ≤ 200000;

    分类标签 Tags 点此展开 

     
     

    AC代码:

    全网最快(截止到现在)

    #include<bits/stdc++.h>
    using namespace std;
    const int N=200100;
    inline const int read(){
        register int x=0,f=1;
        register char ch=getchar();
        while(ch>'9'||ch<'0'){if(ch=='-')f=-1;ch=getchar();}
        while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
    int n,m,c[N],a[N];
    int lowbit(int x){
        return x&-x;
    }
    void updata(int p,int v){
        for(int i=p;i<=n;i+=lowbit(i))
            c[i]+=v;
    }
    int query(int p){
        int ans=0;
        for(int i=p;i>=1;i-=lowbit(i)) ans+=c[i];
        return ans;
    }
    int main(){
        n=read();
        for(int i=1;i<=n;i++) a[i]=read(),updata(i,a[i]);
        m=read();
        for(int i=1,x,y;i<=m;i++){
            x=read();y=read();
            double ans=query(y)-query(x-1);
            printf("%.2f
    ",3.14*ans);
            int mid=x+y>>1;
            updata(mid,-a[mid]);
            a[mid]=0;//注意清零 
        }
        return 0;
    }
  • 相关阅读:
    七、AOP统一处理以及日志打印
    六、spring Boot项目表单验证(最小值为例)以及spring的常用注解
    五、spring-data-Jpa 数据库操作
    四、spring Boot项目中Controller的使用
    三、SpringBoot的常用配置(.yml通过配置文件和注解进行属性注入,以及分别配置生产、开发环境)
    机器学习中的 上采样 下采样 过采样 欠采样
    Mac 安装/卸载 brew
    Keras 训练自己的人脸特征点提取模型的坑
    Keras 使用自己编写的数据生成器
    iPhone 设备管理在哪(已解决)
  • 原文地址:https://www.cnblogs.com/shenben/p/5644959.html
Copyright © 2011-2022 走看看