题意:

      给你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 GSS3 线段树系列1

    SPOJ GSS系列真是有毒啊! 立志刷完,把线段树搞完! 来自lydrainbowcat线段树上的一道例题.(所以解法参考了lyd老师) 题意翻译 n 个数, q 次操作 操作0 x y把 Ax 修 ...

  2. SPOJ - GSS1 —— 线段树 (结点信息合并)

    题目链接:https://vjudge.net/problem/SPOJ-GSS1 GSS1 - Can you answer these queries I #tree You are given ...

  3. SPOJ COT3 Combat on a tree(Trie树、线段树的合并)

    题目链接:http://www.spoj.com/problems/COT3/ Alice and Bob are playing a game on a tree of n nodes.Each n ...

  4. SPOJ 2916 Can you answer these queries V(线段树-分类讨论)

    题目链接:http://www.spoj.com/problems/GSS5/ 题意:给出一个数列.每次查询最大子段和Sum[i,j],其中i和j满足x1<=i<=y1,x2<=j& ...

  5. GSS4 2713. Can you answer these queries IV 线段树

    GSS7 Can you answer these queries IV 题目:给出一个数列,原数列和值不超过1e18,有两种操作: 0 x y:修改区间[x,y]所有数开方后向下调整至最近的整数 1 ...

  6. SPOJ 1557. Can you answer these queries II 线段树

    Can you answer these queries II Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 https://www.spoj.com/pr ...

  7. bzoj 2482: [Spoj GSS2] Can you answer these queries II 线段树

    2482: [Spoj1557] Can you answer these queries II Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 145 ...

  8. spoj gss2 : Can you answer these queries II 离线&&线段树

    1557. Can you answer these queries II Problem code: GSS2 Being a completist and a simplist, kid Yang ...

  9. SPOJ GSS1_Can you answer these queries I(线段树区间合并)

    SPOJ GSS1_Can you answer these queries I(线段树区间合并) 标签(空格分隔): 线段树区间合并 题目链接 GSS1 - Can you answer these ...

随机推荐

  1. pytorch(16)损失函数(二)

    5和6是在数据回归中用的较多的损失函数 5. nn.L1Loss 功能:计算inputs与target之差的绝对值 代码: nn.L1Loss(reduction='mean') 公式: \[l_n ...

  2. 微信小程序在Android和Ios端的获取时间兼容性问题

    an端 var time = new Date() 例如:2020-01-01 01:01:00   ios端 var time = new Date() 例如:2020/01/01 01:01:00 ...

  3. spring事务:事务控制方式,使用AOP控制事务,七种事务传播行为,声明事务,模板对象,模板对象原理分析

    知识点梳理 课堂讲义 1)事务回顾 1.1)什么是事务-视频01 事务可以看做是一次大的活动,它由不同的小活动组成,这些活动要么全部成功,要么全部失败. 1.2)事务的作用 事务特征(ACID) 原子 ...

  4. 在 .NET Core 中构建 REST API

    翻译自 Camilo Reyes 2020年8月26日的文章 <Build a REST API in .NET Core> [1] REST API 可以使用简单的动词(如 POST.P ...

  5. 1-认识c指针

    1.指针和内存 c程序在编译后,会以三种形式使用内存 1静态/全局内存 静态声明的变量分配在这里,全局变量也使用这部分内存.这些变量在程序开始运行时分配,直到程序终止时才会消失 2.自动内存 这些变量 ...

  6. IPFS挖矿赚钱吗?IPFS挖矿是真的吗?

    IPFS一出现就获得了极高的关注度,「让人类信息永存」的口号也让其蒙上了一层神秘的面纱.今天我就来给大家自剖析,一探IPFS技术的真相. IPFS是一个去中心化存储网络,而Filecoin是IPFS激 ...

  7. [Design Pattern With Go]设计模式-单例模式

    定义 一个类只允许创建一个对象(或者实例),那这个类就是一个单例类,这种设计模式就叫作单例模式.当某些数据只需要在系统中保留一份的时候,可以选择使用单例模式. 饿汉式 饿汉式的实现方式比较简单.在类加 ...

  8. [深搜]C. 【例题3】虫食算

    C . [ 例 题 3 ] 虫 食 算 题目解析 正解 : Dfs + 剪枝 依题意,把样例以加法的形式展现出来. 根据加法的性质,可以得出有两种情况:有进位和没有进位的. 而从百位到最高位的结果,又 ...

  9. Day1---Java 基本数据类型 - 四类八种 --九五小庞

    一.Java四大数据类型分类 1.整型 byte .short .int .long 2.浮点型 float . double 3.字符型 char 4.布尔型 boolean 二.八种基本数据类型 ...

  10. JVMGC+Spring Boot生产部署和调参优化

    一.微服务开发完成,IDEA进行maven clean和package 出现BUILD SUCCESS说明打包成功 二.要求微服务启动时,配置JVM GC调优参数 p.p1 { margin: 0; ...