(有任何问题欢迎留言或私聊 && 欢迎交流讨论哦

题意:BZOJ HDU

 原题目描述在最下面。

 两种操作,1:把区间的数字开方一次,2:区间求和。

思路:

线段树:

 显然不能暴力单点更新。但是有一个规律就是一个数再开方log次后就会变成1了。变成1就没有开方的必要了。

 所以用lazy==1表示此区间内数字全都小于等于1,无需更新。

 对于lazy==0单点更新,lazy==1的不更新。

 求和就是普通的区间求和。看下push_up()函数即可。

树状数组:

 树状数组区间求和很方便。然后这题的开发更操作只需要修改一下add函数即可。每次add(\(i, \sqrt{ ar_{i} - ar_{i}}\))。

 当然也不是暴力枚举更新。有些点的值小于等于1就没必要更新。这是用一个并查集维护一下每个位置下一个需要更新的位置在哪里就可以了。

####AC代码:
BZOJ3211线段树

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <queue>
#include <algorithm>
#include <set>
#include<assert.h>
#define lson rt<<1
#define rson rt<<1|1
#define lowbit(x) (x)&(-(x))
using namespace std;
typedef long long LL;
const int INF = 0x3f3f3f3f;
const int N = (int)1e5+7;
const int mod = 10007;
int n, q;
struct lp{
int l,r;
LL delta;
int lazy;
}cw[N<<2];
LL ar[N];
//lazy==1表示全部小于等于1
void push_up(int rt){
cw[rt].delta=cw[lson].delta+cw[rson].delta;
cw[rt].lazy=(cw[lson].lazy&cw[rson].lazy);
}
void build(int l,int r,int rt){
int mid = (l+r)>>1;
cw[rt].l=l,cw[rt].r=r;
cw[rt].lazy=0;
if(l==r){
cw[rt].delta=ar[l];
if(ar[l]<=1)cw[rt].lazy=1;
return;
}
build(l,mid,lson);build(mid+1,r,rson);
push_up(rt);
}
void update(int L,int R,int rt){
int l=cw[rt].l,r=cw[rt].r,mid=(l+r)>>1;
if(l==r){
cw[rt].delta=(LL)sqrt(cw[rt].delta*1.0);
if(cw[rt].delta<=1)cw[rt].lazy=1;
return;
}
if(L<=mid&&cw[lson].lazy==0)update(L,R,lson);
if(R>mid&&cw[rson].lazy==0)update(L,R,rson);
push_up(rt);
}
LL query(int L,int R,int rt){
int l=cw[rt].l,r=cw[rt].r,mid=(l+r)>>1;
if(L<=l&&r<=R){
return cw[rt].delta;
}
LL sum = 0;
if(L>mid)sum = query(L,R,rson);
else if(R<=mid)sum = query(L,R,lson);
else {
sum = query(L,R,lson)+query(L,R,rson);
}
return sum;
}
int main(){
while(~scanf("%d", &n)){
for(int i=1;i<=n;++i){
scanf("%lld",&ar[i]);
}
build(1,n,1);
scanf("%d",&q);
while(q--){
int op,l,r;
scanf("%d%d%d",&op,&l,&r);
if(op==2){
update(l,r,1);
}else{
printf("%lld\n", query(l,r,1));
}
}
}
return 0;
}

BZOJ3211树状数组

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <queue>
#include <algorithm>
#include <set>
#include<assert.h>
#define lson rt<<1
#define rson rt<<1|1
#define lowbit(x) (x)&(-(x))
using namespace std;
typedef long long LL;
const int INF = 0x3f3f3f3f;
const int N = (int)1e5+7;
const int mod = 10007;
int n, q;
LL bit[N],ar[N];
int fa[N];
void add(int x,LL z){while(x<=n)bit[x]+=z,x+=lowbit(x);}
LL query(int x){LL sum=0;while(x)sum+=bit[x],x-=lowbit(x);return sum;}
int Fi(int x){
return fa[x]==x?x:fa[x]=Fi(fa[x]);
}
int main(){
while(~scanf("%d", &n)){
memset(bit,0,sizeof(bit));
for(int i=1;i<=n;++i){
scanf("%lld",&ar[i]);
add(i,ar[i]);
}
for(int i=1;i<=n;++i)fa[i]=i;
fa[n+1]=n+1;
scanf("%d",&q);
while(q--){
int op,l,r;
scanf("%d%d%d",&op,&l,&r);
if(op==2){
for(int j=l;j<=r;){
LL tmp = (LL)sqrt(ar[j]);
add(j,tmp-ar[j]);
ar[j]=tmp;
fa[j]=j;
if(tmp<=1)fa[j]=j+1;
j=(Fi(j)==j?j+1:fa[j]);
}
}else{
printf("%lld\n", query(r)-query(l-1));
}
}
}
return 0;
}

HDU4027
```
#include
#include
#include
#include
#include
#define lson rt>1;
cw[rt].l = l;cw[rt].r = r;
cw[rt].lazy = 0;
if(l==r){
cw[rt].val = ar[l];
if(cw[rt].val>1;
if(l==r){
cw[rt].val = (LL)sqrt(cw[rt].val*1.0);
if(cw[rt].val mid&&cw[rson].lazy==0) update(L,R,rson);
push_up(rt);
}
LL query(int L, int R, int rt){
int l = cw[rt].l, r = cw[rt].r, mid = (l+r)>>1;
if(Lmid){
if(cw[rson].lazy)return R-L+1;
sum = query(L,R,rson);
}else if(Rr)l^=r^=l^=r;
if(op==0){
update(l, r, 1);
}else if(op == 1){
printf("%I64d\n", query(l, r, 1));
}
}
printf("\n");
}
return 0;
}
```


####原题目描述:
![这里写图片描述](https://img-blog.csdn.net/20180725224908876?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5NTk5MDY3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

BZOJ3211花神游历各国-线段树&树状数组-(HDU4027同类型)的更多相关文章

  1. bzoj3211: 花神游历各国(线段树) 同codevs2492

    3211: 花神游历各国 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 3628  Solved: 1326[Submit][Status][Discu ...

  2. bzoj3211 花神游历各国 线段树,势能分析

    [bzoj3211]花神游历各国 2014年3月17日2,7230 Description   Input   Output 每次x=1时,每行一个整数,表示这次旅行的开心度 Sample Input ...

  3. bzoj3211花神游历各国 线段树

    3211: 花神游历各国 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 4252  Solved: 1547[Submit][Status][Discu ...

  4. BZOJ3211:花神游历各国(线段树)

    Description Input Output 每次x=1时,每行一个整数,表示这次旅行的开心度 Sample Input 4 1 100 5 5 5 1 1 2 2 1 2 1 1 2 2 2 3 ...

  5. bzoj3211花神游历各国&&bzoj3038上帝造题的七分钟2*

    bzoj3211花神游历各国 题意: n个数的序列,m个操作,操作两种:区间开根(向下取整)和区间求和.n≤100000,m≤200000,序列中的数非负且≤109. 题解: 一个≤109的数开6次根 ...

  6. BZOJ3211花神游历各国

    BZOJ3211花神游历各国 BZOJ luogu 分块 记一个all表示该块是否全部<=1,如果all不为真就暴力修改 因为一个数被开根的次数不多,即使\(10^{12}\)只要开根6次也会变 ...

  7. BZOJ-3211花神游历各国 并查集+树状数组

    一开始想写线段树区间开方,简单暴力下,但觉得变成复杂度稍高,懒惰了,编了个复杂度简单的 3211: 花神游历各国 Time Limit: 5 Sec Memory Limit: 128 MB Subm ...

  8. [BZOJ3211]花神游历各国&&[BZOJ3038] 上帝造题的七分钟2 树状数组+并查集

    3211: 花神游历各国 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 4057  Solved: 1480[Submit][Status][Discu ...

  9. BZOJ3211: 花神游历各国(线段树)

    3211: 花神游历各国 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 5692  Solved: 2114[Submit][Status][Discu ...

随机推荐

  1. Java 基础 - 如何理解String不可变

    ref: https://www.zhihu.com/question/20618891 第一个答案. 扩展“ Java 基础 - System.arraycopy() 浅拷贝 深拷贝

  2. 对AngularJs的简单了解

    一.简单介绍 AngularJS是为了克服HTML在构建应用上的不足而设计的.HTML是一门很好的为静态文本展示设计的声明式语言,但要构建WEB应用的话它就显得乏力了.所以我做了一些工作(你也可以觉得 ...

  3. 【LeetCode 24】两两交换链表中的节点

    题目链接 [题解] 简单的链表操作 [代码] /** * Definition for singly-linked list. * struct ListNode { * int val; * Lis ...

  4. renren-fast-vue-动态路由

    在renren-fast-vue项目中,左侧边栏的系统管理这一模块的路由采用的是动态路由的写法, 模块中的路由内容由后台动态生成,在前端开发阶段,采用的是mock模拟数据生成 先是在左侧边栏(view ...

  5. (转)Openfire 中SASL的认证方式之:PLAIN,DIGEST-MD5,anonymous

    转:http://blog.csdn.net/coding_me/article/details/39524137 SASL  的认证方式包括:     1. PLAIN:plain是最简单的机制,但 ...

  6. npm install 超时 国内 切换源; npm ERR! code ELIFECYCLE;

    install 超时 查看npm源地址 npm config get registry #http://registry.npmjs.org 为国外镜像地址 设置阿里云镜像 npm config se ...

  7. nginx502问题

    常见的502错误1.配置错误因为nginx找不到php-fpm了,所以报错,一般是fastcgi_pass后面的路径配置错误了,后面可以是socket或者是ip:port 2.资源耗尽lnmp架构在处 ...

  8. 用Nginx搭建CDN服务器方法-开启Nginx缓存与镜像,自建图片服务器

    利用Nginx的proxy_cache搭建缓存服务器一:编译ngx_cache_purge1.Nginx的Proxy_cache是根据Key值md5哈希存储缓存,支持任意的Key,例如你可以根据”域名 ...

  9. vbs 之 wscript

    https://www.jb51.net/article/20919.htm '''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' ...

  10. mysql优化3:BTree索引和Hash索引

    一.BTree索引 注:名叫btree索引,大的方面看,都用的平衡树,但具体的实现上,各引擎稍有不同,比如,严格地说,NDB引擎使用的是T-tree,Myisam和innodb中默认用B-tree索引 ...