★   输入文件:treed.in   输出文件:treed.out   简单对比
时间限制:1 s   内存限制:128 MB

【问题描述】

在一个凉爽的夏夜,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不是π)

【输入格式】

第一行,一个整数n。

第二行,共n个整数,表示每棵树的高度。

第三行,一个整数m,表示共m个区间。

以下m行,每个区间[x,y]的左右端点x,y。

【输出格式】

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

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

【输入样例】

5

1 2 3 4 5

2

1 4

2 4

【输出样例】

31.40

21.98

【数据规模】

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

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

【样例解释】

第一次砍[1,4]的树后,森林变为:1 0 3 4 5

1 线段树

区间查询

单点修改

屠龙宝刀点击就送

#include <cstdio>
#define Max 200000
const double pi=3.14; struct NodeTypeTree{
int l,r,dis;
};
struct NodeTypeTree tr[Max<<];
int n,m;
inline void tree_up(int k)
{
tr[k].dis=tr[k<<].dis+tr[k<<|].dis;
}
void build(int k,int l,int r)
{
tr[k].l=l;tr[k].r=r;
if(l==r)
{
scanf("%d",&tr[k].dis);
return;
}
int mid=(l+r)>>;
build(k<<,l,mid);build(k<<|,mid+,r);
tree_up(k);
}
int section_query(int k,int l,int r)
{
if(tr[k].l==l&&tr[k].r==r) return tr[k].dis;
int mid=(tr[k].l+tr[k].r)>>;
if(l>mid) return section_query(k<<|,l,r);
else if(r<=mid) return section_query(k<<,l,r);
else return section_query(k<<,l,mid)+section_query(k<<|,mid+,r);
}
void single_delete(int k,int t)
{
if(tr[k].l==tr[k].r)
{
tr[k].dis=;
return;
}
int mid=(tr[k].l+tr[k].r)>>;
if(mid>=t) single_delete(k<<,t);
else single_delete(k<<|,t);
tree_up(k);
}
int main()
{
freopen("treed.in","r",stdin);
freopen("treed.out","w",stdout);
scanf("%d",&n);
build(,,n);
scanf("%d",&m);
for(int x,y;m--;)
{
scanf("%d%d",&x,&y);
printf("%.2lf\n",section_query(,x,y)*pi);
single_delete(,(x+y)>>);
}
return ;
}

2 树状数组

跑的飞快

#include <ctype.h>
#include <cstdio>
#define N 200005
const double PI = 3.14; inline int lowbit(int x) {return x&(-x);}
int a[N],n,m,tag[N];
inline void Read(int &x)
{
bool f=;
register char ch=getchar();
for(x=;!isdigit(ch);ch=getchar()) if(ch=='-') f=;
for(;isdigit(ch);ch=getchar()) x=x*+ch-'';
x=f?-x:x;
}
inline void update(int x,int y)
{
for(;x<=n;x+=lowbit(x))
tag[x]+=y;
}
inline int ask(int x)
{
int ans=;
for(;x;x-=lowbit(x)) ans+=tag[x];
return ans;
}
int Main()
{
freopen("treed.in","r",stdin);
freopen("treed.out","w",stdout);
Read(n);
for(int i=;i<=n;i++)
{
Read(a[i]);
update(i,a[i]);
}
Read(m);
for(int x,y;m--;)
{
Read(x);
Read(y);
printf("%.2lf\n",(ask(y)-ask(x-))*PI);
int mid=(x+y)>>;
update(mid,-a[mid]);
a[mid]=;
}
return ;
}
int sb=Main();
int main(int argc,char *argv[]) {;}

COGS 1361. 树的更多相关文章

  1. cogs 1361. 树 线段树

    1361. 树 ★   输入文件:treed.in   输出文件:treed.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述] 在一个凉爽的夏夜,xth和rabbit来到 ...

  2. cogs 2039. 树的统计

    2039. 树的统计 ★★   输入文件:counttree.in   输出文件:counttree.out   简单对比时间限制:1 s   内存限制:128 MB [题目描述] 关于树的统计问题有 ...

  3. 5.27 Test

    1.COGS.2039. 树的统计 思路: 各种方法. 代码: 1.遍历树1   时间 0.314 s   平均内存 2.96 MB #include<cstdio> using name ...

  4. Cogs 1583. [POJ3237]树的维护 LCT,树链剖分

    题目:http://cojs.tk/cogs/problem/problem.php?pid=1583 1583. [POJ3237]树的维护 ★★★☆   输入文件:maintaintree.in  ...

  5. Cogs 1672. [SPOJ375 QTREE]难存的情缘 LCT,树链剖分,填坑计划

    题目:http://cojs.tk/cogs/problem/problem.php?pid=1672 1672. [SPOJ375 QTREE]难存的情缘 ★★★☆   输入文件:qtree.in  ...

  6. COGS.1822.[AHOI2013]作业(莫队 树状数组/分块)

    题目链接: COGS.BZOJ3236 Upd: 树状数组实现的是单点加 区间求和,采用值域分块可以\(O(1)\)修改\(O(sqrt(n))\)查询.同BZOJ3809. 莫队为\(O(n^{1. ...

  7. COGS 2638. 数列操作ψ 线段树

    传送门 : COGS 2638. 数列操作ψ 线段树 这道题让我们维护区间最大值,以及维护区间and,or一个数 我们考虑用线段树进行维护,这时候我们就要用到吉司机线段树啦 QAQ 由于发现若干次an ...

  8. cogs 2554. [福利]可持久化线段树

    题目链接 cogs 2554. [福利]可持久化线段树 题解 没有 代码 #include<cstdio> #include<cstring> #include<algo ...

  9. COGS 1583. [POJ3237]树的维护

    二次联通门 : COGS 1583. [POJ3237]树的维护 /* COGS 1583. [POJ3237]树的维护 树链剖分 + 边权化点权 线段树 单点修改 + 区间取相反数 + 查询区间最大 ...

随机推荐

  1. hadoop-3.0.0 配置中的 yarn.nodemanager.aux-services 项

    在hadoop-3.0.0-alpha4 的配置中,yarn.nodemanager.aux-services项的默认值是“mapreduce.shuffle”,但如果在hadoop-2.2 中继续使 ...

  2. UVA-10391(字符串检索)

    题意: 给定一个字典,要求找出所有的复合词; 思路: 用map把词都存起来,再把词拆开看是否是出现过的单词; AC代码: #include <bits/stdc++.h> #include ...

  3. Balancing Act(树的重心)

    传送门 Balancing Act Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 14070   Accepted: 593 ...

  4. API介绍

    API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码 ...

  5. Unity3D4.* NGUI制作动态字库

    新建一个工程,这个工程必须没有中文路径,否则会不识别字体!!! 首先导入NGUI插件,这里我用的是NGUI 3.0.2版本的. 在Assets 下创建一个文件夹,用来存放接下来的工作文件 . 这里随便 ...

  6. 019--python内置函数

    一.内置高阶函数 map函数:接收两个数据 函数和序列,map()将函数调用'映射'到序列身上,并返回一个含有所有返回值的一个列表 num1 = [1,2,3,4,5] num2 = [5,4,3,2 ...

  7. 任务31:课时介绍 & 任务32:Cookie-based认证介绍 &任务33:34课 :AccountController复制过来没有移除[Authorize]标签

    任务31:课时介绍 cookie-based网站这边的认证 jwt基于移动端和前后端分离的项目,jwt有一些独特的优势 jwt在asp.net core中的实现机制,了解实现机制并进行扩展.比如非标准 ...

  8. 任务43:Identity MVC:UI

    基于原来做的cookie认证的代码:MvcCookieAuthSample 增加登陆和退出的方法: 增加Login和SignIn这两个Action方法. 在Views下面创建Account文件夹,然后 ...

  9. poj3617【贪心】

    题意: 给定长度为N的字符串S,要构造一个长度为N的字符串T串. 从S的头部删除一个字符,加到T的尾部 从S的尾部删除一个字符,加到T的尾部 目标是构造字典序尽可能小的字符串. 思路: 贪心,每次取小 ...

  10. [Shader 着色器]冰霜效果的思考和实现

    http://game.ceeger.com/forum/read.php?tid=23209&fid=2 由于最近要做一个冰系的角色,就想能不能做一些冰霜效果.那么就试试吧,先弄一张原图: ...