【codevs2492】【Tyvj1941】上帝造题的七分钟2,线段树的特别技巧
传送门1
传送门2
写在前面:现在要干的事情更多了
思路:开方这玩意好像没法加lazy,只能暴力向下找,但是我们可以想到当有一段全是1的时候这一段一定不用再修改了,所以我们加一个判断这段区间是否全为1的标记,这样就能大大减少复杂度了,剩下就是狂敲代码了
注意:LL
代码:
#include<bits/stdc++.h>
#define LL long long
using namespace std;
int n,m;
LL a[100002];
struct os
{LL sum;bool f;
}tree[400002];
void build(int now,int begin,int end)
{if (begin==end) {tree[now].sum=a[end];return;}int mid=(begin+end)>>1;build(now<<1,begin,mid);build(now<<1|1,mid+1,end);tree[now].sum=tree[now<<1].sum+tree[now<<1|1].sum;
}
void update(int now,int begin,int end,int l,int r)
{if (tree[now].f) return;if (begin==end){tree[now].sum=sqrt(tree[now].sum);if (tree[now].sum<=1) tree[now].f=1;return;}int mid=(begin+end)>>1;if (mid>=l) update(now<<1,begin,mid,l,r);if (mid<r) update(now<<1|1,mid+1,end,l,r);tree[now].sum=tree[now<<1].sum+tree[now<<1|1].sum;tree[now].f=tree[now<<1].f&tree[now<<1|1].f;
}
LL get(int now,int begin,int end,int l,int r)
{if (l<=begin&&end<=r) return tree[now].sum;LL ans=0;int mid=(begin+end)>>1;if (mid>=l) ans+=get(now<<1,begin,mid,l,r);if (mid<r) ans+=get(now<<1|1,mid+1,end,l,r);return ans;
}
main()
{scanf("%d",&n);for (int i=1;i<=n;i++) scanf("%lld",&a[i]);build(1,1,n);scanf("%d",&m);int opt,x,y;while (m--){scanf("%d%d%d",&opt,&x,&y);if (x>y) swap(x,y);if (opt) printf("%lld\n",get(1,1,n,x,y));else update(1,1,n,x,y);}
}
【codevs2492】【Tyvj1941】上帝造题的七分钟2,线段树的特别技巧相关推荐
- 【BZOJ3132】【TYVJ1716】上帝造题的七分钟 二维树状数组
题目大意 维护一个\(n\times m\)的矩阵,有两种操作: \(1~x_1~y_1~x_2~y_2~v\):把\((a,b),(c,d)\)为顶点的矩形区域内的所有数字加上\(v\). \(2~ ...
- 【暑假训练 7.10】 codevs 2492 上帝造题的七分钟2
Description XLk觉得<上帝造题的七分钟>不太过瘾,于是有了第二部. "第一分钟,X说,要有数列,于是便给定了一个正整数数列. 第二分钟,L说,要能修改,于是便有了对 ...
- BZOJ3038 上帝造题的七分钟
Time Limit: 3 Sec Memory Limit: 128 MB Description XLk觉得<上帝造题的七分钟>不太过瘾,于是有了第二部. "第一分钟,X说, ...
- BZOJ 3038: 上帝造题的七分钟2【线段树区间开方问题】
3038: 上帝造题的七分钟2 Time Limit: 3 Sec Memory Limit: 128 MB Submit: 1469 Solved: 631 [Submit][Status][D ...
- BZOJ 3038 上帝造题的七分钟2
Description XLk觉得<上帝造题的七分钟>不太过瘾,于是有了第二部. "第一分钟,X说,要有数列,于是便给定了一个正整数数列. 第二分钟,L说,要能修改,于是便有了对 ...
- 【luogu4145】 上帝造题的七分钟2 / 花神游历各国 [线段树]
P4145 上帝造题的七分钟2 / 花神游历各国 把一段区间里的每个数都开方 求区间和 可以发现最多开方开6次就能都变为1 所以可以hei暴力地一个点一个点地改 具体操作我用的和buildtree差不 ...
- bzoj 3211: 花神游历各国 bzoj 3038: 上帝造题的七分钟2
3211: 花神游历各国 Time Limit: 5 Sec Memory Limit: 128 MB Submit: 3438 Solved: 1277 [Submit][Status][Dis ...
- 上帝造题的七分钟(ybtoj-树状数组)
文章目录 题目描述 解析 代码 thanks for reading! 题目描述 解析 差点活活恶心死 搬砖题 (其实细节没有那么多,还是代码能力太差) 利用矩阵的二维差分 加上树状数组搞一搞 就完事 ...
- P4145 上帝造题的七分钟2 / 花神游历各国(线段树区间开平方)
有点意思,不需要什么懒标记之类的东西,因为一个数无论怎样开平方,最后取整的结果必然会是1,所以我们不妨用最大值来维护,若区间最大值不为1,就暴力修改,否则不用管. #include<bits/s ...
最新文章
- gorm 密码字段隐藏_非常专业且免费的密码管理工具
- Spring(3.2.3) - Beans(11): depends-on
- python如何控制运行时间_python 限制函数执行时间,自己实现
- java读取邮箱附件_使用javamail获取附件内容
- 利用数组实现栈java,用java编写出来:用数组实现一个栈
- php中的解析范围符,PHP 范围解析操作符(::)用法分析【访问静态成员和类常量】...
- C Tricks(八)—— 硬币和骰子的模拟
- 自学python免费教材-python零基础自学教材
- g4600黑苹果efi_授人以鱼不如授人以渔,黑苹果EFI相关问题分析方法以及解决思路...
- 软件测试方法(单元测试、集成测试、系统测试、确认测试)
- 客户体验的投资回报率,你知道怎么算吗?
- 儿童智能手环方案/案列/APP/小程序/网站
- 什么是大数据以及大数据的相关技术?
- JAVA多线程同步计数器
- 学习笔记(5):JavaWeb基础核心技术-5. 佟刚_JavaWEB_Servlet 的配置及生命周期方法
- C# 模拟 HTTP POST请求
- 2019百度地图离线地图制作
- MyBatis之Base64加密数据源
- mysql自动备份脚本下载+简单解读
- java汉字转换拼音
热门文章
- 【Python成长之路】装逼的一行代码:快速共享文件【华为云分享】
- Docker集群管理之Swarm介绍
- 一统江湖的大前端(7)React.js-从开发者到工程师
- 一统江湖的大前端(4)shell.js——穿上马甲我照样认识你
- Android笔记 隐式意图vs显示意图+隐式意图打开短信应用demo
- -3dB下的正确率是100%!!!
- day4 数组的初始化和练习
- nodejs后端使用art-template
- java的interface_java中如何实现一个接口interface-百度经验
- scala模板写入es_Spark——scala 实用小方法