[BZOJ3211] 花神游历各国 - 线段树
3211: 花神游历各国
Time Limit: 5 Sec Memory Limit: 128 MB
Submit: 4766 Solved: 1741
[Submit][Status][Discuss]
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
Source
SPOJ2713 gss4 数据已加强
提交地址 : BZOJ LUOGU
题解:
直接线段树大力维护, 在遇到0或者1的时候可以直接不用管;
如果子树都为1或0,它也不用管;
Code:
1 #include <iostream> 2 #include <cstdio> 3 #include <cmath> 4 using namespace std; 5 6 int n, m; 7 long long a[100005]; 8 9 struct SegMent 10 { 11 int l, r; 12 long long sum; 13 bool flag; 14 }tr[100005*4]; 15 16 #define ls(x) x << 1 17 #define rs(x) x<<1|1 18 #define sum(x) tr[x].sum 19 #define flag(x) tr[x].flag 20 21 inline void build(int o, int l, int r) 22 { 23 if (l == r) 24 { 25 sum(o) = a[l]; 26 tr[o].l = tr[o].r = l; 27 if (a[l] == 1 or a[l] == 0) flag(o) = 1; 28 return; 29 } 30 int mid = l + r >> 1; 31 build(ls(o), l, mid); 32 build(rs(o), mid + 1, r); 33 sum(o) = sum(rs(o)) + sum(ls(o)); 34 flag(o) = flag(rs(o)) & flag(ls(o)); 35 tr[o].l = tr[ls(o)].l; 36 tr[o].r = tr[rs(o)].r; 37 } 38 39 inline void change(int o, int l, int r) 40 { 41 if (flag(o)) return; 42 if (tr[o].l == tr[o].r) 43 { 44 sum(o) = (long long)sqrt(sum(o)); 45 if (sum(o) == 1 or sum(o) == 0) flag(o) = 1; 46 return; 47 } 48 int mid = tr[o].l + tr[o].r >> 1; 49 if (l <= mid) change(ls(o), l, r); 50 if (r > mid) change(rs(o), l, r); 51 sum(o) = sum(rs(o)) + sum(ls(o)); 52 flag(o) = flag(ls(o)) & flag(rs(o)); 53 } 54 55 inline long long query(int o, int l, int r) 56 { 57 if (tr[o].l >= l and tr[o].r <= r) return sum(o); 58 long long res = 0; 59 int mid = tr[o].l + tr[o].r >> 1; 60 if (l <= mid) res += query(ls(o), l, r); 61 if (r > mid) res += query(rs(o), l, r); 62 return res; 63 } 64 65 int main() 66 { 67 scanf("%d", &n); 68 for (register int i = 1 ; i <= n ; i ++) scanf("%lld",&a[i]); 69 build(1, 1, n); 70 scanf("%d", &m); 71 while (m--) 72 { 73 int opt, x, y; 74 scanf("%d%d%d", &opt, &x, &y); 75 if (x > y) swap(x, y); 76 if (opt == 1) printf("%lld\n", query(1, x, y)); 77 else change(1, x, y); 78 } 79 return 0; 80 }
转载于:https://www.cnblogs.com/BriMon/p/9161484.html
[BZOJ3211] 花神游历各国 - 线段树相关推荐
- 【luogu4145】 上帝造题的七分钟2 / 花神游历各国 [线段树]
P4145 上帝造题的七分钟2 / 花神游历各国 把一段区间里的每个数都开方 求区间和 可以发现最多开方开6次就能都变为1 所以可以hei暴力地一个点一个点地改 具体操作我用的和buildtree差不 ...
- BZOJ3211: 花神游历各国
BZOJ3211: 花神游历各国 Description Input Output 每次x=1时,每行一个整数,表示这次旅行的开心度 Sample Input 4 1 100 5 5 5 1 1 2 ...
- 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 ...
- 花神游历各国(线段树)
题目描述: 花神喜欢步行游历各国,顺便虐爆各地竞赛.花神有一条游览路线,它是线型的,也就是说,所有游历国家呈一条线的形状排列,花神对每个国家都有一个喜欢程度(当然花神并不一定喜欢所有国家). 每一次旅 ...
- 花神游历各国 题解(小清新线段树/树状数组+并查集)
题面 众所周知,这是一道小清新线段树 然而可以用树状数组水过去且跑得飞快 看到区间开方第一反应肯定是线段树懒标记区间修改之类的,但是这个东西似乎确凿不可维护 所以考虑暴力循环单点修改->T飞 于 ...
- 【题解】洛谷P4145 花神游历各国(线段树)
洛谷P4145:https://www.luogu.org/problemnew/show/P4145 思路 这道题的重点在于sqrt(1)=1 一个限制条件 与正常线段树不同的是区间修改为开方 那么 ...
最新文章
- wordpress php 7 速度优化,WordPress优化提速必做的6种操作代码篇
- 生物学将是下一代计算平台:DNA是代码,CRISPR是编程语言
- Activity的管理类
- OpenVirteX 安装
- 概率统计:第一章 概率论的基本概念
- 笔记-项目范围管理-需求工程-需求管理
- CVPR 2020 《Local-Global Video-Text Interactions for Temporal Grounding》论文笔记
- 如何迁移 Flink 任务到实时计算
- 如何停止一个正在运行的java线程
- STL中算法锦集(二)
- 使用API获得SAP CRM Sales Area数据
- P3385-[模板]负环【SPFA】
- 计算机达人成长之路 目录
- PID参数整定法(1)
- AXI3.0 AXI4.0 五大通道接口详细介绍
- C语言中结构体所占内存空间
- 数字人体”视觉挑战赛-宫颈癌风险智能诊断
- seo推广,seo推广是什么意思呢
- 2015暑假集训总结
- zfoo中的providers和consumers标签
热门文章
- Cookie工具类-cookieUtil.js
- [区块链] 密码学——Merkle 树
- 从零开始学习springBoot(Contextpath+修改默认idk)
- Atcoder 077E - guruguru(线段树+dp)
- 4.设计模式---单例模式(上)
- log4j.appender.stdout.layout.ConversionPattern
- 普林斯顿公开课 算法1-5:算法理论
- 算法导论-堆排序习题解
- jsp网页实现任意进制的数转换成任意进制数
- Rust是如何实现内存安全的--理解RAII/所有权机制/智能指针/引用