题意:

      给你n个数(n <= 100000),然后两种操作,0 x y :把x-y的数全都sqrt ,1 x y:输出 x-y的和。


思路:

      直接线段树更新就行了,对于当前的这个区间,如果里面只有0或者1,那么就把他mark上,以后不用在更新了,10^18 更新不了多少次就会变成0或者1的,所以时间复杂度也没多少,每次更新能返回就返回,不能返回就一定要精确到点,然后sqrt,然后查询的话就是一个简单的段询问。


#include<stdio.h>
#include<string.h>
#include<math.h>

#define lson l ,mid ,t << 1
#define rson mid + 1 ,r ,t << 1 | 1

long long  sum[440000];
long long mark[440000];

void Pushup(int t)
{
   sum[t] = sum[t<<1] + sum[t<<1|1];
   mark[t] = (mark[t<<1] & mark[t<<1|1]);
}

void BuidTree(int l ,int r ,int t)
{
   mark[t] = sum[t] = 0;
   if(l == r)
   {
      scanf("%lld" ,&sum[t]);
      if(sum[t] == 0 || sum[t] == 1)
      mark[t] = 1;
      return;
   }
   int mid = (l + r) >> 1;
   BuidTree(lson);
   BuidTree(rson);
   Pushup(t);
   return;
}
 
void Update(int l ,int r ,int t ,int a ,int b)
{
   if(mark[t]) return;
   if(l == r)
   {
      sum[t] = (long long)sqrt(sum[t]*1.0);
      if(sum[t] == 1 || sum[t] == 0) mark[t] = 1;
      return;
   }
   int mid = (l + r) >> 1;
   if(a <= mid) Update(lson ,a ,b);
   if(b > mid)  Update(rson ,a ,b);
   Pushup(t);
}

long long Query(int l ,int r ,int t ,int a ,int b)
{
   if(a <= l && b >= r) return sum[t];
   int mid = (l + r) >> 1;
   long long Ans = 0;
   if(a <= mid) Ans = Query(lson ,a ,b);
   if(b > mid) Ans += Query(rson ,a ,b);
   return Ans;
}

int main ()
{
   int i ,n ,m ,cas = 1;
   int key ,a ,b;
   while(~scanf("%d" ,&n))
   {
      BuidTree(1 ,n ,1);
      scanf("%d" ,&m);
      printf("Case #%d:\n" ,cas ++);
      while(m--)
      {
         scanf("%d %d %d" ,&key ,&a ,&b);
         int t;
         if(a > b) 
         {
            t = a ,a = b ,b = t;
         } 
         if(!key)
         {
            Update(1 ,n ,1 ,a ,b);
         }
         else
         {
            printf("%lld\n" ,Query(1 ,n ,1 ,a ,b));
         }
      }
      printf("\n");
   }
   return 0;
}

SPOJ 2713 线段树(sqrt)相关推荐

  1. SPOJ GGS1 线段树

    题意:求区间最大的子段和 这题之前写过 然后今天重写了一遍 感觉确实是区间合并的好题 解法:要开四个域 分别是当前段的和 左起连续最大和 右起连续最大和 区间最大子段和 然后询问的时候维护一个当前最大 ...

  2. SPOJ GSS3-Can you answer these queries III-分治+线段树区间合并

    Can you answer these queries III SPOJ - GSS3 这道题和洛谷的小白逛公园一样的题目. 传送门: 洛谷 P4513 小白逛公园-区间最大子段和-分治+线段树区间 ...

  3. SPOJ - DQUERY D-query(莫队/线段树+离线/主席树)

    题目链接:点击查看 题目大意:给出一个由n个数组成的序列,再给出m次查询,每次查询区间[l,r]中有多少个不同的数 题目分析:莫队模板题,直接套板子就好了 有点意思的是函数返回值为布尔类型,然后没有r ...

  4. SPOJ 375 Query on a tree(线段树维护树链剖分)

    题目链接:http://www.spoj.com/problems/QTREE/ 题意:给出一个树,两种操作:(1)修改某条边的权值:(2)询问某两个顶点之间边的最大值. 思路:树的路径剖分和线段树维 ...

  5. SPOJ KGSS Maximum Sum (线段树)

    SPOJ KGSS Maximum Sum 题意:求区间最大值与第二大值之和 思路:线段树维护两个最大值 /********************************************** ...

  6. SPOJ - QTREE Query on a tree(树链剖分+线段树)

    题目链接:点击查看 题目大意:给出一棵由n个点组成的树,再给出数个操作,每次操作分为下列几种类型: QUERY x y:询问点x-点y这条路径上的所有边权的最大值 CHANGE x y:将第x条边的权 ...

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

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

  8. Can you answer these queries V SPOJ - GSS5 (分类讨论+线段树维护区间最大子段和)

    recursion有一个整数序列a[n].现在recursion有m次询问,每次她想知道Max { A[i]+A[i+1]+...+A[j] ; x1 <= i <= y1 , x2 &l ...

  9. D-query SPOJ - DQUERY(求区间不同数的个数)(树状数组||线段树+离散)(主席树+在线)

    English Vietnamese Given a sequence of n numbers a1, a2, -, an and a number of d-queries. A d-query ...

最新文章

  1. 服务器显示接口类型,查看服务器各接口卡情况的命令是:lspci
  2. 目标检测开源代码汇总 object detection algorithm codes
  3. python代码需要背吗-Python 的库、方法这么多,写程序的时候能记住吗?
  4. 使用brew安装Logstash(Mac)
  5. TCP的三次握手与四次挥手图文
  6. wxWidgets:wxSpinEvent类用法
  7. win 7 系统ie浏览器升级11版本后,f12功能不可用的问题
  8. 启动服务器如何删除文件,在服务器启动时用Filter来删除某种类型的文件
  9. cnn文本分类python实现_CNN文本分类
  10. 3299元起!结缘梅奔F1车队,Redmi K50电竞版发布
  11. MFC消息映射与消息传递内幕
  12. 基于java的租房系统源代码_基于jsp的租房管理系统-JavaEE实现租房管理系统 - java项目源码...
  13. 用计算机上初中英语课的方法,如何上好初中英语读写课
  14. 蓝桥杯 -罗马数字问题
  15. LA 3713 Astronauts
  16. x64dbg调试器使用
  17. 三色螺旋线 -《跟小海龟学Python》案例代码
  18. 计算机一级excel中模拟运算,2017年计算机一级《MS Office》操作试题及答案
  19. Greenplum Python专用库gppylib学习——GpArray
  20. json数据自动生成图表

热门文章

  1. 优云携手网易云 助力企业“互联网+”转型
  2. 一种导致android开发时无法生成R.java文件的原因
  3. 【python】关于控制台的中文输出出现\x形式的问题 python常用包与如何安装
  4. JSON API免费接口
  5. Codeforces 1016F Road Projects
  6. Spring 依赖注入(二、注入参数)
  7. jQuery Layer 弹层组件
  8. [开心]很搞笑的贴图,必看(收藏)
  9. Java ---- java io / java nio / java net 学习资源汇总
  10. javaScript年份下拉列表框内容为当前年份及前后50年