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
1 1 4

Sample Output

101
11
11

HINT

对于100%的数据, n ≤ 100000,m≤200000 ,data[i]非负且小于10^9


题解Here!

这是一道线段树的沙茶题。。。

然而我$WA+TLE$了无数发,原因是没有特判$0$。。。

我们发现$10^9$最多开个$5$次根号就会变成$1$。

于是用线段树暴力修改就好辣!

附代码:

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cmath>
#define LSON rt<<1
#define RSON rt<<1|1
#define DATA(x) a[x].data
#define SIGN(x) a[x].flag
#define LSIDE(x) a[x].l
#define RSIDE(x) a[x].r
#define WIDTH(x) (RSIDE(x)-LSIDE(x)+1)
#define MAXN 100010
using namespace std;
int n,m;
struct Segment_Tree{long long data;bool flag;int l,r;
}a[MAXN<<2];
inline long long read(){long long date=0,w=1;char c=0;while(c<'0'||c>'9'){if(c=='-')w=-1;c=getchar();}while(c>='0'&&c<='9'){date=date*10+c-'0';c=getchar();}return date*w;
}
inline void pushup(int rt){DATA(rt)=DATA(LSON)+DATA(RSON);SIGN(rt)=SIGN(LSON)&SIGN(RSON);
}
void buildtree(int l,int r,int rt){LSIDE(rt)=l;RSIDE(rt)=r;SIGN(rt)=false;if(l==r){DATA(rt)=read();if(DATA(rt)==0||DATA(rt)==1)SIGN(rt)=true;return;}int mid=l+r>>1;buildtree(l,mid,LSON);buildtree(mid+1,r,RSON);pushup(rt);
}
void update(int l,int r,int rt){if(SIGN(rt)||DATA(rt)==0)return;if(LSIDE(rt)==RSIDE(rt)){DATA(rt)=sqrt(DATA(rt));if(DATA(rt)==0||DATA(rt)==1)SIGN(rt)=true;return;}int mid=LSIDE(rt)+RSIDE(rt)>>1;if(l<=mid)update(l,r,LSON);if(mid<r)update(l,r,RSON);pushup(rt);
}
long long query(int l,int r,int rt){long long ans=0;if(l<=LSIDE(rt)&&RSIDE(rt)<=r)return DATA(rt);int mid=LSIDE(rt)+RSIDE(rt)>>1;if(l<=mid)ans+=query(l,r,LSON);if(mid<r)ans+=query(l,r,RSON);return ans;
}
void work(){int f,x,y;while(m--){f=read();x=read();y=read();if(x>y)swap(x,y);if(f==1)printf("%lld\n",query(x,y,1));else update(x,y,1);}
}
void init(){n=read();buildtree(1,n,1);m=read();
}
int main(){init();work();return 0;
}

转载于:https://www.cnblogs.com/Yangrui-Blog/p/9495137.html

BZOJ3211: 花神游历各国相关推荐

  1. [BZOJ3211] 花神游历各国 - 线段树

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

  2. bzoj3211花神游历各国

    试题描述 花仔喜欢步行游历各国,花仔有一条游览路线,它是线型的,也就是说,所有游历国家呈一条线的形状排列,花仔对每个国家都有一个喜欢度(当然花仔并不一定喜欢所有国家),每一次旅行中,花仔会选择一条旅游 ...

  3. BZOJ3211 花神游历各国

    题目蓝链 Solution 由于每一个数最多被开根\(5\)次就会为\(1\),所以我们可以用一个并查集维护下一个大于\(1\)的数的位置.然后再用树状数组维护一下区间和,每次修改直接暴力改就行了,修 ...

  4. 3211: 花神游历各国

    3211: 花神游历各国 Time Limit: 5 Sec  Memory Limit: 128 MB Submit: 1042  Solved: 381 [Submit][Status] Desc ...

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

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

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

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

  7. 1550:花神游历各国

    [题目描述] 原题来自:BZOJ 3211 花神喜欢步行游历各国,顺便虐爆各地竞赛.花神有一条游览路线,它是线型的,也就是说,所有游历国家呈一条线的形状排列,花神对每个国家都有一个喜欢程度(当然花神并 ...

  8. ybt.1550 花神游历各国 题解

    [题目描述] 花神喜欢步行游历各国,顺便虐爆各地竞赛.花神有一条游览路线,它是线型的,也就是说,所有游历国家呈一条线的形状排列,花神对每个国家都有一个喜欢程度(当然花神并不一定喜欢所有国家). 每一次 ...

  9. 1276. 花神游历各国

    花神喜欢步行游历各国,顺便虐爆各地竞赛. 花神有一条游览路线,它是线型的,也就是说,所有游历国家呈一条线的形状排列,花神对每个国家都有一个喜欢程度(当然花神并不一定喜欢所有国家). 每一次旅行中,花神 ...

最新文章

  1. Logistic Classification
  2. 最新综述:用于文本分类的数据增强方法
  3. python +java 用socket在局域网进行图片上传给springboot后端并进行前端访问
  4. logstash异常
  5. Javascript對表格的操作[知識積累帖]
  6. C# struct 性能损失
  7. Mac 连不上华为 p9 处理历程(一)
  8. oracle 自增字段设置
  9. wordpress修改mysql端口_wordpress更改默认端口的方法
  10. everedit 格式化json_Mac Init
  11. Vue使用iconfont图标
  12. html颜色设计,网页设计中经典色彩搭配方案
  13. 2012年8月编程语言就业趋势
  14. ElasticSearch学习笔记
  15. 动网产品失败, 合作伙伴寒心离去
  16. 51CTO与我的大学生活
  17. HDU-1567-A/B——算法笔记
  18. Python IDLE 如何设置清屏功能(清屏快捷键,亲测可用)
  19. 谷歌 地图 android studio,Android Studio百度地图开发(一)
  20. 1 Go语言开发环境搭建详细教程+go常见bug合集【Go语言教程】

热门文章

  1. 1、【转载】Python yield 使用浅析
  2. PowerDesigner15使用时的十五个问题
  3. Docker 验证 Centos7.2 离线安装 Docker 环境
  4. 解读 2018之Go语言篇(下):明年有哪些值得期待?
  5. 分布式系统监视zabbix讲解十之监控tomcat--技术流ken
  6. CUDA学习(六十五)
  7. openjudge #输出一个整数序列中与指定数字相同的数的个数。
  8. 智慧城市排名出炉 拉动安防产业向前进
  9. Linux下的定时器
  10. FreeBSD系统常用软件列表