BZOJ3211: 花神游历各国
BZOJ3211: 花神游历各国
Description
Input
Output
每次x=1时,每行一个整数,表示这次旅行的开心度
Sample Input
1 100 5 5
5
1 1 2
2 1 2
1 1 2
2 2 3
1 1 4
Sample Output
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: 花神游历各国相关推荐
- [BZOJ3211] 花神游历各国 - 线段树
3211: 花神游历各国 Time Limit: 5 Sec Memory Limit: 128 MB Submit: 4766 Solved: 1741 [Submit][Status][Dis ...
- bzoj3211花神游历各国
试题描述 花仔喜欢步行游历各国,花仔有一条游览路线,它是线型的,也就是说,所有游历国家呈一条线的形状排列,花仔对每个国家都有一个喜欢度(当然花仔并不一定喜欢所有国家),每一次旅行中,花仔会选择一条旅游 ...
- BZOJ3211 花神游历各国
题目蓝链 Solution 由于每一个数最多被开根\(5\)次就会为\(1\),所以我们可以用一个并查集维护下一个大于\(1\)的数的位置.然后再用树状数组维护一下区间和,每次修改直接暴力改就行了,修 ...
- 3211: 花神游历各国
3211: 花神游历各国 Time Limit: 5 Sec Memory Limit: 128 MB Submit: 1042 Solved: 381 [Submit][Status] Desc ...
- bzoj 3211: 花神游历各国 bzoj 3038: 上帝造题的七分钟2
3211: 花神游历各国 Time Limit: 5 Sec Memory Limit: 128 MB Submit: 3438 Solved: 1277 [Submit][Status][Dis ...
- 【luogu4145】 上帝造题的七分钟2 / 花神游历各国 [线段树]
P4145 上帝造题的七分钟2 / 花神游历各国 把一段区间里的每个数都开方 求区间和 可以发现最多开方开6次就能都变为1 所以可以hei暴力地一个点一个点地改 具体操作我用的和buildtree差不 ...
- 1550:花神游历各国
[题目描述] 原题来自:BZOJ 3211 花神喜欢步行游历各国,顺便虐爆各地竞赛.花神有一条游览路线,它是线型的,也就是说,所有游历国家呈一条线的形状排列,花神对每个国家都有一个喜欢程度(当然花神并 ...
- ybt.1550 花神游历各国 题解
[题目描述] 花神喜欢步行游历各国,顺便虐爆各地竞赛.花神有一条游览路线,它是线型的,也就是说,所有游历国家呈一条线的形状排列,花神对每个国家都有一个喜欢程度(当然花神并不一定喜欢所有国家). 每一次 ...
- 1276. 花神游历各国
花神喜欢步行游历各国,顺便虐爆各地竞赛. 花神有一条游览路线,它是线型的,也就是说,所有游历国家呈一条线的形状排列,花神对每个国家都有一个喜欢程度(当然花神并不一定喜欢所有国家). 每一次旅行中,花神 ...
最新文章
- Logistic Classification
- 最新综述:用于文本分类的数据增强方法
- python +java 用socket在局域网进行图片上传给springboot后端并进行前端访问
- logstash异常
- Javascript對表格的操作[知識積累帖]
- C# struct 性能损失
- Mac 连不上华为 p9 处理历程(一)
- oracle 自增字段设置
- wordpress修改mysql端口_wordpress更改默认端口的方法
- everedit 格式化json_Mac Init
- Vue使用iconfont图标
- html颜色设计,网页设计中经典色彩搭配方案
- 2012年8月编程语言就业趋势
- ElasticSearch学习笔记
- 动网产品失败, 合作伙伴寒心离去
- 51CTO与我的大学生活
- HDU-1567-A/B——算法笔记
- Python IDLE 如何设置清屏功能(清屏快捷键,亲测可用)
- 谷歌 地图 android studio,Android Studio百度地图开发(一)
- 1 Go语言开发环境搭建详细教程+go常见bug合集【Go语言教程】