题意:

给你一个序列,然后给出m个命令,

每个命令有两种:①:在区间内实现开方;②:求一个区间和;

思路:

一开始没思路啊,这个开方又不像加加减减一起来就好了,开方只能自己玩啊,但是仔细一想一个数也才开8次还是7次,那么直接暴力一发就好了。。。中间判断一下区间值是不是已经都是1了,直接返回就好了。能暴力的话,咱就随便搞搞就好啦

一开始还建树出错了,感觉不对就直接把树输出来看看是不是挂了。。。不过还是要自己检查代码,瞎瘠薄输出不好。。。。

挫code….

#include<cstdio>
#include<math.h>
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
typedef __int64 LL; const int N=100007;
struct st{
int left,right;
LL sum;
LL len;
};
st q[N*4]; void build(int num,int L,int R)
{
q[num].left=L;
q[num].right=R;
if(L==R)
{
scanf("%lld",&q[num].sum);
q[num].len=1;
return;
}
build(2*num,L,(L+R)/2);
build(2*num+1,(L+R)/2+1,R);
q[num].len=R-L+1;
q[num].sum=q[2*num].sum+q[2*num+1].sum;
} void update(int num,int s,int t)
{
if(q[num].left>=s&&q[num].right<=t)
{
if(q[num].sum==q[num].len)
return;
if(q[num].left==q[num].right)
{
q[num].sum=LL(sqrt(q[num].sum));
return;
}
update(2*num,q[num].left,(q[num].left+q[num].right)/2);
update(2*num+1,(q[num].left+q[num].right)/2+1,q[num].right);
q[num].sum=q[2*num].sum+q[2*num+1].sum;
return;
}
int mid=(q[num].left+q[num].right)/2;
if(mid>=t)
update(2*num,s,t);
else if(mid<s)
update(2*num+1,s,t);
else
{
update(2*num,s,mid);
update(2*num+1,mid+1,t);
}
q[num].sum=q[2*num].sum+q[2*num+1].sum;
} LL query(int num,int s,int t)
{
if(q[num].left>=s&&q[num].right<=t)
return q[num].sum;
int mid=(q[num].left+q[num].right)/2;
LL ans=0;
if(mid>=t)
ans+=query(2*num,s,t);
else if(mid<s)
ans+=query(2*num+1,s,t);
else
{
ans+=query(2*num,s,mid);
ans+=query(2*num+1,mid+1,t);
}
return ans;
} int main()
{
int n,m;
int cas=1;
while(~scanf("%d",&n))
{
build(1,1,n);
/*for(int i=1;i<=19;i++)
{
printf("%d %d %lld \n",q[i].left,q[i].right,q[i].sum);
}*/
printf("Case #%d:\n",cas++);
scanf("%d",&m);
while(m--)
{
int t,x,y;
scanf("%d%d%d",&t,&x,&y);
if(x>y)
swap(x,y);
if(t)
printf("%lld\n",query(1,x,y));
else
update(1,x,y);
/*puts("");
for(int i=1;i<=19;i++)
{
printf("%d %d %lld \n",q[i].left,q[i].right,q[i].sum);
}
puts("");*/
}
puts("");
}
}

最新文章

  1. 使用--gc-section编译选项减小程序体积
  2. 3、python,read(),readlines()和readline()
  3. Joblogs&mdash;&mdash;ContentValues的使用
  4. IOS - 唯一标识符的获得和更新
  5. Nginx 反向代理、负载均衡、页面缓存、URL重写以及读写分离
  6. IOS 友盟使用详解
  7. C#中 += (s, e) =&gt; 这些字符什么意思
  8. SQL SERVER数据库修改是否区分大小写
  9. Visual Studio 2013密钥
  10. 简单模拟Hibernate的主要功能实现
  11. js 连续赋值
  12. SharePoint 2013 弹窗效果之本地HTML打开方式(二)
  13. 轻量级GUI enlightenment
  14. [Ext JS 4] 实战之Grid, Tree Gird编辑Cell
  15. JavaScriptSerializer类 对象序列化为JSON,JSON反序列化为对象
  16. tastypie Django REST framework API [Hello JSON]
  17. PHPMailer发送邮件失败:SMTP connect failed
  18. web.xml中三种通配符及匹配规则
  19. struts2拦截器执行模拟 参考马士兵老师
  20. Delphi 统计Word文档中的字数

热门文章

  1. poj 1694 An Old Stone Game 树形dp
  2. time machine不备份指定文件夹
  3. VS2013 update4+Cocos2d-x 3.7 Win8下安装方法及配置
  4. C++ 学习总结 复习篇
  5. wamp配置虚拟域名
  6. Java堆内存与栈内存对比
  7. Android研究之游戏开发摄像头更新
  8. mvc4中 @Url.Action 如何读取javascript变量的值
  9. POJ 1703 Find them, Catch them(种类并查集)
  10. 解决gradle多模块依赖在Idea中能运行,gradle build失败的问题。