正题

题目链接:https://www.luogu.com.cn/problem/P4145


题目大意

一个序列要求支持

  1. 区间开根向下取整
  2. 区间求和

解题思路

一个数开根约logloglog次就会到111,所以我们对于每个数记录一下开根多少次会到111,每次修改用并查集找还没到111的暴力修改树状数组上的值即可。

时间复杂度O(nlog⁡2n)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/花神游历各国【并查集,树状数组】相关推荐

  1. P4145 上帝造题的七分钟2 / 花神游历各国(线段树区间开平方)

    有点意思,不需要什么懒标记之类的东西,因为一个数无论怎样开平方,最后取整的结果必然会是1,所以我们不妨用最大值来维护,若区间最大值不为1,就暴力修改,否则不用管. #include<bits/s ...

  2. 【luogu4145】 上帝造题的七分钟2 / 花神游历各国 [线段树]

    P4145 上帝造题的七分钟2 / 花神游历各国 把一段区间里的每个数都开方 求区间和 可以发现最多开方开6次就能都变为1 所以可以hei暴力地一个点一个点地改 具体操作我用的和buildtree差不 ...

  3. [BZOJ 3211]花神游历各国(并查集+树状数组)

    Description Solution 树状数组单点修改区间查询 我们知道一个数n最多修改loglogn次就会变为1 并查集维护每个数右边第一个不为1的位置 #include<cstdio&g ...

  4. 【暑假训练 7.10】 codevs 2492 上帝造题的七分钟2

    Description XLk觉得<上帝造题的七分钟>不太过瘾,于是有了第二部. "第一分钟,X说,要有数列,于是便给定了一个正整数数列. 第二分钟,L说,要能修改,于是便有了对 ...

  5. BZOJ3038 上帝造题的七分钟

    Time Limit: 3 Sec Memory Limit: 128 MB Description XLk觉得<上帝造题的七分钟>不太过瘾,于是有了第二部. "第一分钟,X说, ...

  6. BZOJ 3038: 上帝造题的七分钟2【线段树区间开方问题】

    3038: 上帝造题的七分钟2 Time Limit: 3 Sec  Memory Limit: 128 MB Submit: 1469  Solved: 631 [Submit][Status][D ...

  7. BZOJ 3038 上帝造题的七分钟2

    Description XLk觉得<上帝造题的七分钟>不太过瘾,于是有了第二部. "第一分钟,X说,要有数列,于是便给定了一个正整数数列. 第二分钟,L说,要能修改,于是便有了对 ...

  8. bzoj 3211: 花神游历各国 bzoj 3038: 上帝造题的七分钟2

    3211: 花神游历各国 Time Limit: 5 Sec  Memory Limit: 128 MB Submit: 3438  Solved: 1277 [Submit][Status][Dis ...

  9. 洛谷4145上帝造题的七分钟2

    题目:https://www.luogu.org/problemnew/show/P4145 题解:发现1e12开方6次就变成1了.1不管开方多少次还是1. 所以并查集记录nxt表示下一个可操作者在哪 ...

最新文章

  1. opencv meanStdDev
  2. 【iOS】NSDate分类,获得中国农历
  3. java timezone 107_java - Java使用TimeZone - 堆栈内存溢出
  4. CornerNet-Lite测试
  5. python 笔记 之 sqlalchemy操作数据库-说明
  6. python2中的unicode_python2中的unicode()函数在python3中会报错:
  7. Java Web系列:Spring MVC基础
  8. 第六次的服务端课程:JDBC,数据源配置
  9. 和程序员在一起是怎样的体验
  10. C#温故而知新学习系列之XML编程—Xml写入器XmlWriter类(三)
  11. php 文字超出画布,input实现文字超出省略号(代码示例)
  12. 女程序员口述:我活最好,年薪35万!
  13. php 获取当月的阴历值,PHP计算节日、节气、农阳历互换的代码
  14. 用nohup执行python程序时,print无法输出
  15. Zookeeper简介,架构,单机版搭建
  16. 凯利讯讲解为什么MOS管可以防止电源反接?
  17. 平面设计如何做出空间创意作品?
  18. 商务翻译证,高级商务翻译证
  19. 【算法】算法之美—Crashing Balloon
  20. 音频转文字怎么转?这些方法值得一试

热门文章

  1. sql 计算 某字段 不同值出现 的次数_教你如何合理选用和计算电线规格,电线回路分配和注意事项...
  2. 绘制矩形php,PHP_php绘制一个矩形的方法,本文实例讲述了php绘制一个矩 - phpStudy...
  3. 数字转字符函数_Excel之文本函数CONCATENATE/TEXT/LEFT/MID/RIGHT/FIND/LEN
  4. 全国计算机考试光盘,全国计算机一级模拟考试题(光盘).doc
  5. 满汉楼(德鲁伊连接池+DBUtils+DAO+Mysql)保姆级别分析+代码实现
  6. c语言glut打正方形,OpenGL绘制正方形并用键盘移动
  7. Java实现AVL平衡树
  8. ajax获取php的数组,使用AJAX请求获取数组并将其传递到php数组中 - javascript
  9. Docker之Dockerfile详解
  10. 算法---字符串顺序平移