博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【luogu4145】 上帝造题的七分钟2 / 花神游历各国 [线段树]
阅读量:4519 次
发布时间:2019-06-08

本文共 1397 字,大约阅读时间需要 4 分钟。

把一段区间里的每个数都开方 求区间和

可以发现最多开方开6次就能都变为1 所以可以hei暴力地一个点一个点地改 具体操作我用的和buildtree差不多

还要注意 是当前区间的最大值<=1时才不处理 我写的==1QAQ 导致BZOJ上有一个点超时

#include
#include
#include
#include
#include
#include
#include
using namespace std;#define ll long long#define rg register#define lson o<<1#define rson o<<1|1const int N=100000+5,M=200000+5,inf=0x3f3f3f3f,P=19650827;int n,m;ll a[N],sum[N<<2],mx[N<<2];template
void rd(t &x){ x=0;int w=0;char ch=0; while(!isdigit(ch)) w|=ch=='-',ch=getchar(); while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar(); x=w?-x:x;} void pushup(int o){ sum[o]=sum[lson]+sum[rson]; mx[o]=max(mx[lson],mx[rson]);} void update(int o,int l,int r,int x,int y){ if(r
>1; update(lson,l,mid,x,y),update(rson,mid+1,r,x,y); pushup(o);} void buildtree(int o,int l,int r){ if(l==r) {sum[o]=mx[o]=a[l];return;} int mid=(l+r)>>1; buildtree(lson,l,mid); buildtree(rson,mid+1,r); pushup(o);} ll query(int o,int l,int r,int x,int y){ ll ans=0; if(r
>1; ans+=query(lson,l,mid,x,y); ans+=query(rson,mid+1,r,x,y); return ans;} int main(){ rd(n); for(int i=1;i<=n;++i) rd(a[i]); buildtree(1,1,n); rd(m); while(m--){ int k,l,r; rd(k),rd(l),rd(r); if(l>r) swap(l,r); if(k==2) update(1,1,n,l,r); else printf("%lld\n",query(1,1,n,l,r)); } return 0;}

 

转载于:https://www.cnblogs.com/lxyyyy/p/11164189.html

你可能感兴趣的文章
html5基础学习
查看>>
理工之 A+B Problem III
查看>>
SalesForce自定义按钮(javascript执行),点击按钮更新Filed
查看>>
Android中ViewPager实现滑动条及与Fragment结合的实例教程
查看>>
组织过程资产与事业环境因素
查看>>
学习和思考的要点
查看>>
16年收官之战,堪称完美,祝愿大家2017一举成名天下闻,虎啸龙吟展宏图
查看>>
使用jquery获取ul的li的值赋值
查看>>
Struts 2 标签
查看>>
关于 BFC 的一些实践例子
查看>>
201671010129 2016—2017—2 《Java程序设计》学习Java总结
查看>>
[每日一讲] Python系列:变量、内存管理与传递
查看>>
UI设计黄金法则
查看>>
HTML页面的重绘(repaint)和重流(reflow)
查看>>
将联系人导入到iPhone模拟器
查看>>
Android常用URI以及URI简介
查看>>
Postgresql 远程连接配置
查看>>
奇偶个数
查看>>
解决请求筛选模块被配置为拒绝包含的查询字符串过长的请求
查看>>
PHP基础
查看>>