Bzoj3211花神游历各国

提供一种数据结构,支持区间求和,以及区间开根号。

这种题一般暴力谁都能打,主要是练线段树。

下面给出两种解法:

第一种,额外维护区间最大值。

由于1、0开根是其本身,开根没有意义,我们维护区间最大值,如果区间最大值已经为1或0则直接return,否则继续向下开根。

剩下的维护区间和就可以了。

#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<vector>
#include<queue>
#include<stack>
#include<map>
#include<set>
#define ll long long 
using namespace std;
struct Sengment_Tree{int l,r;ll sum,maxn;
}t[400200];
int n,m;
ll read(){ll sum=0;int f=1;char x=getchar();while(x<'0'||x>'9'){if(x=='-') f=-1;x=getchar();}while(x>='0'&&x<='9'){sum=sum*10+x-'0';x=getchar();}return sum*f;
}
void updata(int p){t[p].sum=t[p<<1].sum+t[p<<1|1].sum;t[p].maxn=max(t[p<<1].maxn,t[p<<1|1].maxn);
}
void build(int p,int l,int r){t[p].l=l;t[p].r=r;if(l==r){t[p].sum=t[p].maxn=read();return;}int mid=l+r>>1;build(p<<1,l,mid);build(p<<1|1,mid+1,r);updata(p);
}
void change(int p,int l,int r){if(t[p].maxn<=1) return ;if(t[p].l==t[p].r){t[p].sum=t[p].maxn=(ll)sqrt(t[p].sum);return ;}int mid=t[p].l+t[p].r>>1;if(l<=mid) change(p<<1,l,r);if(r>mid) change(p<<1|1,l,r);updata(p);
}
ll ask(int p,int l,int r){if(l<=t[p].l&&t[p].r<=r) return t[p].sum;int mid=t[p].l+t[p].r>>1;ll ans=0;if(l<=mid) ans+=ask(p<<1,l,r);if(r>mid) ans+=ask(p<<1|1,l,r);return ans;
}
int main(){int x,y,z;n=read();build(1,1,n);m=read();for(int i=1;i<=m;i++){x=read();y=read();z=read();if(x==1) printf("%lld\n",ask(1,y,z));else change(1,y,z);}return 0;
}
View Code

第二种,维护lazy,表示是否已经全是1或0。

如果是,则直接return,否则继续向下开根。

#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<vector>
#include<queue>
#define ll long long 
using namespace std;
struct Sengment_Tree{int l,r,flag;ll sum;
}t[400200];
ll read(){ll sum=0;int f=1;char x=getchar();while(x<'0'||x>'9'){if(x=='-') f=-1;x=getchar();}while(x>='0'&&x<='9'){sum=sum*10+x-'0';x=getchar();}return sum*f;
}
int n,qnum;
ll a[100050];
void updata(int p){t[p].sum=t[p<<1].sum+t[p<<1|1].sum;t[p].flag=t[p<<1].flag&t[p<<1|1].flag;
}
void build(int p,int l,int r){t[p].l=l;t[p].r=r;if(l==r){t[p].sum=a[l];if(a[l]==0||a[l]==1)t[p].flag=1;else t[p].flag=0;return ;}int mid=l+r>>1;build(p<<1,l,mid);build(p<<1|1,mid+1,r);updata(p);
}
void change(int p,int l,int r){if(t[p].l==t[p].r){t[p].sum=(ll)sqrt(t[p].sum);if(t[p].sum==0||t[p].sum==1)t[p].flag=1;return ;}int mid=t[p].l+t[p].r>>1;if(l<=mid&&!t[p<<1].flag) change(p<<1,l,r);if(r>mid&&!t[p<<1|1].flag) change(p<<1|1,l,r);updata(p);
}
ll ask(int p,int l,int r){
//    cout<<t[p].sum<<endl;if(l<=t[p].l&&t[p].r<=r) return t[p].sum;int mid=t[p].l+t[p].r>>1;ll ans=0;if(l<=mid) ans+=ask(p<<1,l,r);if(r>mid) ans+=ask(p<<1|1,l,r);return ans;
}
int main(){
//    freopen("out.docx","w",stdout);int x,y,opt;n=read();for(int i=1;i<=n;i++) a[i]=read();build(1,1,n);qnum=read();for(int i=1;i<=qnum;i++){opt=read();x=read();y=read();if(opt==1) printf("%lld\n",ask(1,x,y));else change(1,x,y);}return 0;
} 
View Code

时间复杂度上来说,每个数最多被开大约5次(可以自己拿计算机按按),那么每个区间最多拜访的次数也不会太大,所以均摊一下,过掉这道题是没什么问题的。

转载于:https://www.cnblogs.com/Yu-shi/p/11138129.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/21192.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

bzoj3211 花神游历各国

传送门&#xff1a;http://www.lydsy.com/JudgeOnline/problem.php?id3211 【题解】 区间开根号&#xff0c;由于每个数被开根号不会很多次就变成1&#xff0c;每次我们暴力开根下去&#xff0c;同时记录s[x]表示x这个区间内是不是全是1&#xff0c;如果是就不用开下去了 这样…

ybt.1550 花神游历各国 题解

【题目描述】 花神喜欢步行游历各国&#xff0c;顺便虐爆各地竞赛。花神有一条游览路线&#xff0c;它是线型的&#xff0c;也就是说&#xff0c;所有游历国家呈一条线的形状排列&#xff0c;花神对每个国家都有一个喜欢程度&#xff08;当然花神并不一定喜欢所有国家&#xff…

花神倒果汁

花神倒果汁(juice.pas/c/cpp)【题目描述】为了庆祝花神开花&#xff0c;花神决定举办一个宴会。其中有一个游戏叫倒果汁。果汁容器的底座是一个独立的NM的矩阵&#xff0c;矩阵的每个格点有一个高度&#xff0c;表示这个格子正上方有多少个111的方块。相邻两个方块被粘得严实&a…

Centos7.9部署sd-webui,容易上手易学就会

一、什么是sd-webui 最近两年AI技术非常火爆&#xff0c;特别是今年随着ChatGPT被吹爆&#xff0c;更多的AI技术映入大家眼帘。相较于其他AI&#xff0c;感觉AI绘画更接地气&#xff0c;sd webui全名&#xff1a;Stable Diffusion web ui是AI绘画中的一种算法&#xff0c;是一…

已损坏,无法打开。 您应该将它移到废纸篓。解决方案

1.首先确认下隐私与安全性是否选择了任何来源 如果没有任何来源选项可参考 https://wangjian.blog.csdn.net/article/details/130246875?spm1001.2014.3001.5502 2.如果还是不行,就用终极大招,给文件安全性权限.打开终端,先输入如下指令 sudo xattr -r -d com.apple.quaran…

Pycharm使用(配置)技巧

下载Pycharm后&#xff0c;需要将界面配置的人性化一点&#xff0c;下面介绍一下本人觉得方便的配置方法和使用技巧。 配置方法&#xff1a; 版本汉化&#xff1a; Chinese   打开File,找到Settings   打开Settings中的Pulgins&#xff0c;选择Marketplace,搜索chinese&a…

GPT Prompt(提示词)写法与教程,相关站点与工具

文章目录 1、Prompt工程师&#xff08;提示工程师&#xff09;2、提示词教程3、提示词工具&#xff08;中文&#xff09;4、提示词工具&#xff08;英文&#xff09; 1、Prompt工程师&#xff08;提示工程师&#xff09; Prompt工程师&#xff0c;也称为AI提示工程师&#xff…

chatgpt赋能python:Python汉化包:让你的编程更加优美

Python汉化包&#xff1a;让你的编程更加优美 作为一名有10年python编程经验的工程师&#xff0c;我深知Python在编程领域的重要性。但是&#xff0c;对于刚开始学习Python的新手来说&#xff0c;可能会受到英文显示的影响&#xff0c;导致学习或开发难度增加。这个时候&#…

chatgpt赋能python:如何取消Python的汉化

如何取消Python的汉化 Python是一种被广泛使用的高级编程语言&#xff0c;其简单易学、灵活性强和开源等特点让许多开发者和企业选择它作为主要开发工具。但是&#xff0c;对于某些用户来说&#xff0c;Python自带的中文化界面可能并不符合他们的需求&#xff0c;因此取消Pyth…

cursor中文设置----输出中文

来源&#xff1a;微信公众号「编程学习基地」 文章目录 软件中文设置中文问题输出设置 软件中文设置 方法&#xff1a; 点击文件->首选项->扩展: 搜索zh-CN :安装chinese(simplified) 简体中文语言包 3&#xff09;安装完成重启Cursor就会用中文回答问题了 中文问题…

小米组织架构变动历史

2018年 9月3日&#xff0c;新设集团参谋部和组织部&#xff0c;改组电视部、生态链部、MIUI 部和互娱部等四个业务部&#xff0c;重组成十个新的业务部。参谋部&#xff0c;高层管理干部的聘用、升迁、培训和考核激励等&#xff0c;以及各个部门的组织建设和编制审批&#xff…

互联网 + :小米案例版

目录 上&#xff1a;感知正在生成的未来 中&#xff1a;做适者生存的“达尔文雀” “互联网”价值观 “互联网”流程 “互联网”资源 下&#xff1a;进化的未来&#xff1a;两种路线并行 路线一&#xff1a;以“互联网”实现跨界&#xff0c;大举建设生态系 路线二&#xff1a;…

电商项目:高仿小米商城(一)

前言 时间过得很快&#xff0c;统一哥转眼也大三了。欢娱不惜、时光易逝。不由得引起人的感叹 那时候我只是个Java入门小白&#xff0c;lambda表达式都jio得难得一匹&#xff0c;但我心中的不甘是清晰的。了解我的人都知道&#xff0c;我向来是个不会向现实低头的人。技术水…

中国信通院推出了一个“APP签名服务系统,可防篡改、可追溯、第三方认证“的初步了解

中国信通院推出了一个“APP签名服务系统,可防篡改、可追溯、第三方认证"的初步了解 今天查看邮箱无意间看到一封小米应用商店的发的邮箱&#xff0c;内容如下: 点击上图中的链接进入官网 国家工信部竟然搞一个 App签名服务系统 , 这个有点和谷歌应用商店的应用自签名功能…

最新ECShop小米商城模板堂商业源码+手机版/整站数据/团购

正文: 完整演示图放到压缩包里了&#xff0c;因为是属于整站长图&#xff0c;文章里面不好放&#xff0c;程序有安装说明&#xff0c;有兴趣的自己去看吧。 价值6000的小米商城模板&#xff0c;ECShop内核&#xff0c;带团购、手机版和微信商城的哦&#xff0c;源码站长亲测&…

黑马点评项目-短信登录功能

一、导入黑马点评项目 1、代码下载 视频资源链接&#xff1a;P25 实战篇-02.短信登录-导入黑马点评项目 代码可以直接去黑马微信公众号上搜索&#xff0c;或者从下面的网盘链接中下载&#xff1a;链接: https://pan.baidu.com/s/1aWhWVn2Ai7AeuDm0KftSqw 提取码: snuw 2、数…

2023最新匿名短信【时光送信】H5源码V4.0版+后端管理

如果把这个做成副业那将大大增加你每天的收益像这种看似简单&#xff0c;非常冷漠小众的项目&#xff0c;往往可以带给你超高收益&#xff0c;而且每条短信成本1毛都不到 里面就包含这三个功能&#xff0c;看似不起眼对学生或者正在谈恋爱的人很有用 发出去的短信就是这种&…

Smartbi观点 | ChatGPT还处于初级阶段?然而AI早已打入BI内部

最近&#xff0c;当我们还沉浸在电影《流浪地球2》MOSS所带来的震感时&#xff0c;ChatGPT又火爆社交媒体&#xff0c;成为全球“新顶流”。 官方数据显示&#xff0c;今年1月&#xff0c;平均每天约有1300万独立访客使用 ChatGPT&#xff0c;累计用户超1亿&#xff0c;创下了…

录用2360篇、接收率25.78%,CVPR 2023接收结果公布

关注并星标 从此不迷路 计算机视觉研究院 公众号ID&#xff5c;ComputerVisionGzq 学习群&#xff5c;扫码在主页获取加入方式 计算机视觉研究院专栏 作者&#xff1a;Edison_G 你中了吗&#xff1f; 转自《机器之心》 接收率出来了&#xff01;在短短几个小时内&#xff0c;各…

ChatGPT的阴谋~第1125位投票者的时间轴

2023年3月29日&#xff0c;媒体都在转发马斯克的公开信&#xff0c;大意是暂停一切大型AI研发至少6个月&#xff0c;并在此期间制定相应方案管控AI。虽然公开信只有595个单词&#xff0c;却被世界众多顶级教授&#xff0c;科技界联合创始人一致认同。 10日后&#xff0c;OpenA…