P4145-上帝造题的七分钟2/花神游历各国【并查集,树状数组】
正题
题目链接:https://www.luogu.com.cn/problem/P4145
题目大意
一个序列要求支持
- 区间开根向下取整
- 区间求和
解题思路
一个数开根约logloglog次就会到111,所以我们对于每个数记录一下开根多少次会到111,每次修改用并查集找还没到111的暴力修改树状数组上的值即可。
时间复杂度O(nlog2n)O(n\log^2 n)O(nlog2n)
codecodecode
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define ll long long
#define lowbit(x) x&-x
using namespace std;
const ll N=1e5+10;
ll n,m,fa[N],t[N],a[N],w[N];
void Change(ll x,ll val){while(x<=n){t[x]+=val;x+=lowbit(x);}
}
ll Ask(ll x){ll ans=0;while(x){ans+=t[x];x-=lowbit(x);}return ans;
}
ll find(ll x)
{return (fa[x]==x)?(x):(fa[x]=find(fa[x]));}
void Move(ll x){ll k=sqrt(w[x]);a[x]--;Change(x,-w[x]+k);w[x]=k;if(!a[x]){if(!a[x+1]&&x<n)fa[x]=find(x+1);if(!a[x-1]&&x>1)fa[x-1]=find(x);}return;
}
int main()
{scanf("%lld",&n);for(ll i=1;i<=n;i++){fa[i]=i;ll x;scanf("%lld",&x);w[i]=x;Change(i,x);while(x>1){a[i]++;x=sqrt(x);}}scanf("%lld",&m);for(ll i=1;i<=m;i++){ll k,l,r;scanf("%lld%lld%lld",&k,&l,&r);if(l>r)swap(l,r);if(k==0){while(l<=r&&l){if(a[l])Move(l);l=find(l)+1;}}else printf("%lld\n",Ask(r)-Ask(l-1));}return 0;
}
P4145-上帝造题的七分钟2/花神游历各国【并查集,树状数组】相关推荐
- P4145 上帝造题的七分钟2 / 花神游历各国(线段树区间开平方)
有点意思,不需要什么懒标记之类的东西,因为一个数无论怎样开平方,最后取整的结果必然会是1,所以我们不妨用最大值来维护,若区间最大值不为1,就暴力修改,否则不用管. #include<bits/s ...
- 【luogu4145】 上帝造题的七分钟2 / 花神游历各国 [线段树]
P4145 上帝造题的七分钟2 / 花神游历各国 把一段区间里的每个数都开方 求区间和 可以发现最多开方开6次就能都变为1 所以可以hei暴力地一个点一个点地改 具体操作我用的和buildtree差不 ...
- [BZOJ 3211]花神游历各国(并查集+树状数组)
Description Solution 树状数组单点修改区间查询 我们知道一个数n最多修改loglogn次就会变为1 并查集维护每个数右边第一个不为1的位置 #include<cstdio&g ...
- 【暑假训练 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说,要能修改,于是便有了对 ...
- bzoj 3211: 花神游历各国 bzoj 3038: 上帝造题的七分钟2
3211: 花神游历各国 Time Limit: 5 Sec Memory Limit: 128 MB Submit: 3438 Solved: 1277 [Submit][Status][Dis ...
- 洛谷4145上帝造题的七分钟2
题目:https://www.luogu.org/problemnew/show/P4145 题解:发现1e12开方6次就变成1了.1不管开方多少次还是1. 所以并查集记录nxt表示下一个可操作者在哪 ...
最新文章
- opencv meanStdDev
- 【iOS】NSDate分类,获得中国农历
- java timezone 107_java - Java使用TimeZone - 堆栈内存溢出
- CornerNet-Lite测试
- python 笔记 之 sqlalchemy操作数据库-说明
- python2中的unicode_python2中的unicode()函数在python3中会报错:
- Java Web系列:Spring MVC基础
- 第六次的服务端课程:JDBC,数据源配置
- 和程序员在一起是怎样的体验
- C#温故而知新学习系列之XML编程—Xml写入器XmlWriter类(三)
- php 文字超出画布,input实现文字超出省略号(代码示例)
- 女程序员口述:我活最好,年薪35万!
- php 获取当月的阴历值,PHP计算节日、节气、农阳历互换的代码
- 用nohup执行python程序时,print无法输出
- Zookeeper简介,架构,单机版搭建
- 凯利讯讲解为什么MOS管可以防止电源反接?
- 平面设计如何做出空间创意作品?
- 商务翻译证,高级商务翻译证
- 【算法】算法之美—Crashing Balloon
- 音频转文字怎么转?这些方法值得一试
热门文章
- sql 计算 某字段 不同值出现 的次数_教你如何合理选用和计算电线规格,电线回路分配和注意事项...
- 绘制矩形php,PHP_php绘制一个矩形的方法,本文实例讲述了php绘制一个矩 - phpStudy...
- 数字转字符函数_Excel之文本函数CONCATENATE/TEXT/LEFT/MID/RIGHT/FIND/LEN
- 全国计算机考试光盘,全国计算机一级模拟考试题(光盘).doc
- 满汉楼(德鲁伊连接池+DBUtils+DAO+Mysql)保姆级别分析+代码实现
- c语言glut打正方形,OpenGL绘制正方形并用键盘移动
- Java实现AVL平衡树
- ajax获取php的数组,使用AJAX请求获取数组并将其传递到php数组中 - javascript
- Docker之Dockerfile详解
- 算法---字符串顺序平移