3211: 花神游历各国

Time Limit: 5 Sec  Memory Limit: 128 MB
Submit: 4766  Solved: 1741
[Submit][Status][Discuss]

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

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] 花神游历各国 - 线段树相关推荐

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

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

  2. BZOJ3211: 花神游历各国

    BZOJ3211: 花神游历各国 Description Input Output 每次x=1时,每行一个整数,表示这次旅行的开心度 Sample Input 4 1 100 5 5 5 1 1 2 ...

  3. bzoj3211花神游历各国

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

  4. BZOJ3211 花神游历各国

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

  5. 3211: 花神游历各国

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

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

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

  7. 花神游历各国(线段树)

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

  8. 花神游历各国 题解(小清新线段树/树状数组+并查集)

    题面 众所周知,这是一道小清新线段树 然而可以用树状数组水过去且跑得飞快 看到区间开方第一反应肯定是线段树懒标记区间修改之类的,但是这个东西似乎确凿不可维护 所以考虑暴力循环单点修改->T飞 于 ...

  9. 【题解】洛谷P4145 花神游历各国(线段树)

    洛谷P4145:https://www.luogu.org/problemnew/show/P4145 思路 这道题的重点在于sqrt(1)=1 一个限制条件 与正常线段树不同的是区间修改为开方 那么 ...

最新文章

  1. wordpress php 7 速度优化,WordPress优化提速必做的6种操作代码篇
  2. 生物学将是下一代计算平台:DNA是代码,CRISPR是编程语言
  3. Activity的管理类
  4. OpenVirteX 安装
  5. 概率统计:第一章 概率论的基本概念
  6. 笔记-项目范围管理-需求工程-需求管理
  7. CVPR 2020 《Local-Global Video-Text Interactions for Temporal Grounding》论文笔记
  8. 如何迁移 Flink 任务到实时计算
  9. 如何停止一个正在运行的java线程
  10. STL中算法锦集(二)
  11. 使用API获得SAP CRM Sales Area数据
  12. P3385-[模板]负环【SPFA】
  13. 计算机达人成长之路 目录
  14. PID参数整定法(1)
  15. AXI3.0 AXI4.0 五大通道接口详细介绍
  16. C语言中结构体所占内存空间
  17. 数字人体”视觉挑战赛-宫颈癌风险智能诊断
  18. seo推广,seo推广是什么意思呢
  19. 2015暑假集训总结
  20. zfoo中的providers和consumers标签

热门文章

  1. Cookie工具类-cookieUtil.js
  2. [区块链] 密码学——Merkle 树
  3. 从零开始学习springBoot(Contextpath+修改默认idk)
  4. Atcoder 077E - guruguru(线段树+dp)
  5. 4.设计模式---单例模式(上)
  6. log4j.appender.stdout.layout.ConversionPattern
  7. 普林斯顿公开课 算法1-5:算法理论
  8. 算法导论-堆排序习题解
  9. jsp网页实现任意进制的数转换成任意进制数
  10. Rust是如何实现内存安全的--理解RAII/所有权机制/智能指针/引用