xth 砍树(codevs 1369)

2024-03-28 07:59
文章标签 codevs 砍树 xth 1369

本文主要是介绍xth 砍树(codevs 1369),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目描述  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;

#include<cstring>
#include<iostream>
#include<cstdio>
#define lson l,m,now*2
#define rson m+1,r,now*2+1
#define lch now*2
#define rch now*2+1
#define m (l+r)/2
#define M 200010
using namespace std;
int sum[M*4],n,p;
int read()
{char c=getchar();int num=0,flag=1;while(c<'0'||c>'9'){if(c=='-')flag=-1;c=getchar();}while(c>='0'&&c<='9'){num=num*10+c-'0';c=getchar();}return num*flag;
}
void push_up(int now)
{sum[now]=sum[lch]+sum[rch];
}
void build(int l,int r,int now)
{if(l==r){sum[now]=read();return;}build(lson);build(rson);push_up(now);
}
int query(int x,int y,int l,int r,int now)
{if(l>=x&&r<=y)return sum[now];int ans=0;if(x<=m)ans+=query(x,y,lson);if(y>m)ans+=query(x,y,rson);return ans;
}
void change(int pos,int l,int r,int now)
{if(l==r){sum[now]=0;return;}if(pos<=m)change(pos,lson);else change(pos,rson);push_up(now);
}
int main()
{n=read();build(1,n,1);p=read();for(int i=1;i<=p;i++){int x=read(),y=read();double ans=(double)query(x,y,1,n,1)*3.14;printf("%.2lf\n",ans);change((x+y)/2,1,n,1);}return 0;
} 
View Code

 

转载于:https://www.cnblogs.com/harden/p/5727265.html

这篇关于xth 砍树(codevs 1369)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/854975

相关文章

codevs 1028 花店橱窗布置 最小费用最大流

花与花瓶连边,容量为1,费用为对应费用,s向花连边,容量为1,费用为0,花瓶向t连边,容量为1,费用为0。这里要求最大费用,把费用设为相反数,结果也取相反数。 #include<iostream>#include<cstring>#include<cstdio>#include<queue>#define inf 1000000000using namespace std;int

codevs 1074食物链 并查集

a和b之间有三种关系,a和b同类,a吃b,b吃a,用a+n表示a吃的,a+2*n表示吃a的。与关押犯人一样,但这里要影射出2种虚拟的才足以表示出关系。 #include<cstdio>#include<iostream>using namespace std;int n,k,d,x,y;int fa[200000];int find(int x){return x==fa[x]?

蓝桥杯刷题-06-砍树-图遍历DFS⭐⭐⭐⭐

给定一棵由 n 个结点组成的树以及 m 个不重复的无序数对 (a1, b1), (a2, b2), . . . , (am, bm),其中 ai 互不相同,bi 互不相同,ai ≠ bj(1 ≤ i, j ≤ m)。 小明想知道是否能够选择一条树上的边砍断,使得对于每个 (ai , bi) 满足 ai和 bi 不连通,如果可以则输出应该断掉的边的编号(编号按输入顺序从 1 开始),否则输出 -1.

九度OJ 1366(栈操作) 1367(二叉树遍历) 1368(二叉树路径) 1369(字符串全排列) 1370(特殊数字查找)

1366:栈的压入、弹出序列 http://ac.jobdu.com/problem.php?pid=1366 题意 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。 思路 根据两个数组的值,还原栈的压入弹出过程,如果能够完全还原则答案为YES。 代码 #include <stdio.h>#define N 100000int stack[N]

砍树c++

题目: 代码: #include<bits/stdc++.h>using namespace std;long long n,m,a[100000005];bool jltm(int x){long long sum=0;for(int i=1;i<=n;i++){if(a[i]>x) sum=sum+a[i]-x;}//计算此时锯片高度砍掉的木材if(sum>=m) return

J.砍树【蓝桥杯】树上差分+LCA

树上差分 多次对树上的一些路径做加法操作,然后询问某个点或某条边经过操作后的值,就要考虑树上差分了。 点差分 模拟这个过程 对x到y路径上的点权值均+1,可以等价成对x和y的权值加1,对lca的权值-1,对fa[lca]的权值-1 遍历到x,权值为1回溯到4,通过递归求得子树和,得到权值为1,遍历到7,再回溯回4,权值不变回溯到3,权值-1+1为0遍历到5,再遍历到y,y权值为1回溯到

机试:砍树修路

问题描述 代码示例: //一坐标轴表示某道路,从0开始 到L,整数位置上都种有一颗树。现在该路修建地铁,要砍掉铁路线路上的树木。例如:L等于10,铺设4条铁路,坐标是1到2,2到3,2到8,3到5,那么1到8的树都要被砍掉,剩下0,9,10三棵。程序要求,输入L,输入铁路铺设条数m,然后输入m组铁路的坐标。求剩下多少棵树。#include <bits/stdc++.h>using name

Codevs P1036 商务旅行

Codevs P1036 商务旅行 题目描述 Description 某首都城市的商人要经常到各城镇去做生意,他们按自己的路线去做,目的是为了更好的节约时间。 假设有N个城镇,首都编号为1,商人从首都出发,其他各城镇之间都有道路连接,任意两个城镇之间如果有直连道路,在他们之间行驶需要花费单位时间。该国公路网络发达,从首都出发能到达任意一个城镇,并且公路网络不会存在环。 你的任务是帮助该

【p3128、LQB14I砍树】树上差分

文章目录 差分树上差分p3128LQB14I砍树题目解题步骤代码样例 差分 差分数组求法: 设原始数组是arr,差分数组是b b[0] = arr[0];b[i] = arr[i] - arr[i-1]; 如果我们要对图中2-4区间的数每个都加上3,就可以在差分数组2的位置加上3,在差分数组4的后一个元素即5的位置减去一个3(目的是消除3对后面区间的影响),再对差分数组前

数的划分 CODEVS - 1039

http://codevs.cn/problem/1039/ 参考博客https://blog.csdn.net/qq_37321281/article/details/74531143   #include <stdio.h>int main(){int e[201][7];int n,k,i,j;while(scanf("%d%d",&n,&k)!=EOF){for(i=0;i<=n;