更新操作:一段区间内的全部数开根号

查询操作:一段区间内的sum值

在一个值更新操作十几次之后会变成 1 之后就不需要再更新这段了

所以在update 某个区间 r-l+1==sum[rt] j就return

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <string>
#include <iostream>
#include <algorithm>
#include <sstream>
#include <cmath>
using namespace std;
#include <queue>
#include <stack>
#include <vector>
#include <deque>
#define cler(arr, val)    memset(arr, val, sizeof(arr))
#define FOR(i,a,b)  for(int i=a;i<=b;i++)
#define IN   freopen ("in.txt" , "r" , stdin);
#define OUT  freopen ("out.txt" , "w" , stdout);
typedef long long  LL;
const int MAXN = 120000;
const int MAXM = 200000;
const int INF = 0x3f3f3f3f;
const int mod = 1000000007;
const double eps= 1e-8;
#define lson l,m, rt<<1
#define rson m+1,r,rt<<1|1
LL sum[MAXN<<2];
void pushup(int rt)
{sum[rt]=sum[rt<<1]+sum[rt<<1|1];
}
void build(int l,int r,int rt)
{if(l==r){scanf("%lld",&sum[rt]);return ;}int m=(l+r)>>1;build(lson);build(rson);pushup(rt);
}
LL query(int L,int R,int l,int r,int rt)
{if(L<=l&&r<=R)return sum[rt];int m=(l+r)>>1;LL res=0;if(L<=m) res+=query(L,R,lson);if(R>m) res+=query(L,R,rson);return res;
}
void update(int L,int R,int l,int r,int rt)
{if(r-l+1==sum[rt]&&L<=l && r<=R)return ;if(l==r){sum[rt]=(LL)sqrt(sum[rt]*1.0);return ;}int m=(l+r)>>1;if(L<=m) update(L,R,lson);if(R>m) update(L,R,rson);pushup(rt);
}
int main()
{
#ifndef ONLINE_JUDGEfreopen("in.txt", "r", stdin);//freopen("out.txt", "w", stdout);
#endifint m,n,cas=0,flag=0;while(scanf("%lld",&n)!=EOF){build(1,n,1);scanf("%d",&m);printf("Case #%d:\n",++cas);for(int i=0;i<m;i++){int ls,rs,op;scanf("%d%d%d",&op,&ls,&rs);if(rs<ls)swap(ls,rs);if(op)printf("%lld\n",query(ls,rs,1,n,1));else update(ls,rs,1,n,1);}puts("");}return 0;
}

转载于:https://www.cnblogs.com/kewowlo/p/4088319.html

【线段树】 SPOJ 2713 Can you answer these queries IV相关推荐

  1. 【线段树】GSS5 - Can you answer these queries V(luogu-SPOJ 2916)

    正题 luogu-SPOJ 2916 题目大意 给你一个序列,有若干询问,每次给出左右端点的区间,问你最大字段和 解题思路 用线段树维护区间信息,询问的区间如果有交则分类讨论求解 code #incl ...

  2. 【SPOJ】2713 Can you answer these queries IV

    操作: 1,把[x,y]每个数k变成sqrt(k),向下取整. 2,查询区间的和. 就算10^18,sqrt后减少的很快. 当一个数为0或1时,它不会再变化了,把不会变化的区间标记,不再访问. 所以暴 ...

  3. SPOJ GSS2 Can you answer these queries II (线段树离线) - xgtao -

    Can you answer these queries II 这是一道线段树的题目,维护历史版本,给出N(<=100000)个数字(-100000<=x<=100000),要求求出 ...

  4. SPOJ - GSS3 Can you answer these queries III(线段树+区间合并)

    题目链接:点击查看 题目大意:给出一个长度为n的序列,进行m次操作: 1 x y  查询区间[l,r]中的最大连续子段和 0 x y  将第x个数修改为y 题目分析:因为涉及到单点修改和区间查询等操作 ...

  5. [SPOJ] 1043 Can you answer these queries I [GSS1]

    Pro 给你一个序列{A[1], A[2], ..., A[N]}.( |A[i]| ≤ 15007 , 1 ≤ N ≤ 50000 ) 给定"查询"操作的定义如下: Query( ...

  6. SPOJ 4487 Can you answer these queries VI

    SPOJ_4487 其实这个题目和GSS1是差不多的,只不过由于有增加和删除的操作,这样用线段树就搞不定了,因此可以维护一个splay来实现这些操作. 但是一开始我写出的程序总是TLE,而和网上一些A ...

  7. SPOJ GSS2 Can you answer these queries II

    很好的一道题,想了很久.首先突破的是,可以找到枚举其中一边,假设是尾部y,然后快速找出满足条件的最大的头部x,连续区间的和 很容易想到借助部分和的思想,如果是从y开始往前面累加,那么就是一个关于y的后 ...

  8. spoj 2916. Can you answer these queries V(线段树)

    题目链接:http://www.spoj.com/problems/GSS5/ 题意:给出n个数,求区间最大子段和,但是限制了子段的起点终点,起点要在[x1,y1]内,终点要在[x2,y2]内. 思路 ...

  9. 解题报告:SP2713 GSS4 - Can you answer these queries IV(GSS线段树八部曲之四)

    x>yx>yx>y是真的艹. 然后就是一道模板题了. #include<bits/stdc++.h>using namespace std; typedef long l ...

最新文章

  1. 计算机组成原理实验pc,计算机组成原理实验报告5- PC实验
  2. 《预训练周刊》第14期:World-GAN:Minecraft 世界的生成模型、CMU博士论文探究可控文本生成...
  3. iphone开发 ---- GPS
  4. linux没有交换分区会怎样,linux – 服务器拒绝使用交换分区
  5. 聚簇索引与非聚簇索引学习总结
  6. 2017.8.7 数学作业 思考记录
  7. 7、扫雷游戏地雷数计算
  8. 微信公众号H5支付遇到的那些坑
  9. c ++中字符串长度的_C ++中的字符串长度
  10. SpringBoot 中 get/post 请求处理方式,以及requestboy为Json时的处理
  11. 25.211 -- 物理层信道
  12. visio2007大括号_Microsoft Office Visio如何绘制大括号及其他特殊符号?Microsoft Office Visio绘制大括号及其他特殊符号的方法教程...
  13. Halcon区域形状特征-area_center、area_holes、select_shape、inner_circle和smallest_rectangle2算子
  14. 如何有效地阅读技术书籍
  15. 个人的生活经历和实习经历
  16. 谈谈怎么可以得到显著性图 特征图 featuremap 深度学习的可解释性 卷积神经网络表征可视化研究综述
  17. 从《江南百景图》厨艺大赛说起,聊聊博弈和“奶油系统”
  18. Font-Spider 一个神奇的网页中文字体工具,就是这么任性
  19. 老照片修复软件有哪些?我只告诉你这几个
  20. java 代码名称转换_计算机编码基础知识及Java中编码转换

热门文章

  1. 线路由器常见故障和排除方法
  2. 移动一个网站集所使用的内容数据库
  3. yum是什么?(linux命令)
  4. Node编写API接口,ajax实现增删改查
  5. SQL 难点解决:直观分组
  6. [strace]跟踪进程的系统调用
  7. 第一个C#程序—C#基础回顾
  8. leetcode28 Implement strStr() 在字符串中寻找目标字符串
  9. 关于spring注入
  10. agilent3070软件安装