HDU-4027 Can you answer these queries? --线段树

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=4027

题意及思路:

      有一排战舰,给出每个战舰的能力值,存在两种操作:第一种是把一定范围内所有战舰能力值开根号并向下取整,第二种是求一定区域内所有战舰能力值之和。如果我们暴力递归更新区间上的每一个点,会TLE(不要问我是怎么知道的)。我们可以稍微做一些优化。例如能力值0,1。它们开根号还是它们本身,不需要更新。我们可以增加一个标记tag。如果这个区间都是0或者1,我们就把tag标记为1。以后我们再次更新的时候如果区间tag为1,我们就不继续向下递归。

代码:

 1 #include <iostream>
 2 #include <cmath>
 3 #include <algorithm>
 4 #include <cstdio>
 5 #include <cstring>
 6 #define maxn 100000+5
 7 #define LL long long
 8 using namespace std;
 9 typedef struct node
10 {
11     LL a;
12     int tag;
13 }node;
14 node tree[maxn<<2];
15 void pushup(int rt)      //更新节点的和以及tag值
16 {
17     tree[rt].a=tree[rt<<1].a+tree[rt<<1|1].a;
18     if(tree[rt<<1].tag&&tree[rt<<1|1].tag)
19         tree[rt].tag=1;
20     return ;
21 }
22 int build(int l,int r,int rt)
23 {
24     if(l==r)
25     {
26         scanf("%lld",&tree[rt].a);
27         if(tree[rt].a==0||tree[rt].a==1)
28             tree[rt].tag=1;
29         return  1;
30     }
31     int m=(l+r)>>1;
32     build(l,m,rt<<1);
33     build(m+1,r,rt<<1|1);
34     pushup(rt);
35 }
36 void update(int L,int R,int l,int r,int rt)
37 {
38     if( L<=l  && r <= R&&tree[rt].tag==1)    //如果区间tag值为1,直接返回
39          return ;
40     if(l==r)
41     {
42         tree[rt].a=(LL)(sqrt(1.0*tree[rt].a));
43         if(tree[rt].a==1||tree[rt].a==0)
44             tree[rt].tag=1;
45         return ;
46     }
47     int m=(l+r)>>1;
48     if(L <= m)
49         update(L,R,l,m,rt<<1);
50     if(R >  m)
51         update(L,R,m+1,r,rt<<1|1);
52     pushup(rt);
53 }
54 LL query(int L,int R,int l,int r,int rt)
55 {
56     if(L <= l && r <= R)
57     {
58         return tree[rt].a;
59     }
60     int m=(l+r)>>1;
61     LL ans=0;
62     if(L <= m)
63         ans+=query(L,R,l,m,rt<<1);
64     if(R > m)
65         ans+=query(L,R,m+1,r,rt<<1|1);
66     return ans;
67 }
68 int main()
69 {
70     int n,jishu;
71     jishu=0;
72     while(scanf("%d",&n)!=EOF)
73     {
74         printf("Case #%d:\n",++jishu);
75         build(1,n,1);
76         int k;
77         scanf("%d",&k);
78         while(k--)
79         {
80             int c,a,b;
81             scanf("%d%d%d",&c,&a,&b);
82             if(a>b)
83                 swap(a,b);
84             if(c==0)
85                 update(a,b,1,n,1);
86             else
87                 cout<<query(a,b,1,n,1)<<endl;
88         }
89         cout<<endl;
90     }
91 }

 

转载于:https://www.cnblogs.com/blame/p/11369474.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/423609.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Proxy server 緩存 jsp html

如果服務器端使用Proxy server,jsp頁面會出現頁面混亂的問題.(不同用戶登陸,出現的是同一個用戶的資料),為了避免這種情況存在,可以有兩種方法解決. eg: menu 所在頁面為toppanel.jsp,鏈接就為:http://localhost:8080/q/toppanel.jsp. 這樣user登陸可能會出現manager的menu,man…

shiro学习(6):shiro连接数据库

首先我们先看一下数据库 再看看数据库的测试数据 在我们创建好的maven项目中看一下目录结构 在pom.xml引入 <dependency><groupId>com.mchange</groupId><artifactId>c3p0</artifactId><version>0.9.5.2</version></dependency&g…

【js监听报错】页面监听js报错问题

<html> <head> <script type"text/javascript">// 页面监听js报错问题 οnerrοrhandleErrvar txt"" function handleErr(msg,url,l) { txt"本页中存在错误如下&#xff1a;\n\n" txt"错误&#xff1a;" msg &quo…

链表逆序(JAVA实现)

题目&#xff1a;将一个有链表头的单向单链表逆序 分析&#xff1a; 链表为空或只有一个元素直接返回&#xff1b;设置两个前后相邻的指针p,q&#xff0c;使得p指向的节点为q指向的节点的后继&#xff1b;重复步骤2&#xff0c;直到q为空&#xff1b;调整链表头和链表尾&…

vs/c++缓冲区溢出,未初始化变量检查

缓冲区溢出(buffer overrun)是c/c开发中比较令人头痛的问题,vs2005中有若干编译选项 可以有效的帮助程序员定位这些问题: 1,/GS:优化模式下有效,检测缓冲区溢出,只能检测出覆盖了返回地址的情况. 2,/RTCs:优化模式下无效,检测缓冲区溢出 voidTest2() { charbuffer1[100]; …

java面试题36 已知如下的命令执行 java MyTest a b c 请问哪个语句是正确的? ( )

java面试题36 已知如下的命令执行 java MyTest a b c 请问哪个语句是正确的&#xff1f; ( ) A args[0] "MyTest a b c" B args[0] "MyTest" C args[0] "a" D args[1] "b" 蒙蔽树上蒙蔽果&#xff0c;蒙蔽树下你和我 对于java命…

【微信网页直接下载app】微信跳转-微信浏览器中直接唤起本地浏览器和App

文档传送门&#xff1a;https://github.com/EthanOrange/wechat-redirectdemo&#xff1a; http://wxredirect.jslab.fun/call-app 转载于:https://www.cnblogs.com/xiaohuizhang/p/11377553.html

单例模式的八种写法比较

转:https://www.cnblogs.com/zhaoyan001/p/6365064.html 单例模式是最常用到的设计模式之一&#xff0c;熟悉设计模式的朋友对单例模式都不会陌生。一般介绍单例模式的书籍都会提到 饿汉式 和 懒汉式 这两种实现方式。但是除了这两种方式&#xff0c;本文还会介绍其他几种实现…

Unix操作系统目录存放内容

/Bin存放系统命令 /etc存放系统命令及配置文件的数据库 /lib存放C语言的库函数、数据库 /mnt存放可拆装的软件 /Tmp存放临时文件 /user存放用户目录 转载于:https://www.cnblogs.com/Ewin/archive/2008/12/22/1360111.html

java面试题37 关于对象成员占用内存的说法哪个正确?( )

java面试题37 关于对象成员占用内存的说法哪个正确&#xff1f;&#xff08; &#xff09; A 同一个类的对象共用同一段内存 B 同一个类的对象使用不同的内存段&#xff0c;但静态成员共享相同的内存空间 C 对象的方法不占用内存 D 以上都不对 蒙蔽树上蒙蔽果&#xff0c;…

.NET Framework学习笔记(十)

17.委托 .NET框架使用委托delegate来提供回调函数机制。 classSet{ private Object[] items; public Set(int numItems) { items new Object[numItems]; for (int i 0; i < numItems; i) { items[i] i; } }publicdel…

java面试题38 以下关于 abstract 关键字的说法,正确的是()

java面试题38 以下关于 abstract 关键字的说法&#xff0c;正确的是&#xff08;&#xff09; A abstract 可以与final 并列修饰同一个类。 B abstract 类中不可以有private的成员。 C abstract 类中必须全部是abstract方法。 D abstract 方法必须在abstract类或接口中。 …

GridView强制不换行

前提是不能设置GridView的列宽(可以设置表头的宽度代替列宽) 把下面代码加到Me.objGv.DataBind()下面 GridView表头强制不换行objGv.HeaderRow.Style.Add("word-break", "keep-all")GridView内容强制不换行Fori AsInteger0ToobjGv.Rows.Count -1Forj AsInt…

MySQL和SQL Server数据库基本语句总结(二)

接着上面的总结&#xff0c;这一篇主要是MySQL剩下的内容&#xff08;我用的不多&#xff0c;记下来&#xff0c;防止自己忘记&#xff09; 1.关于触发器 解释 类似于C中的事件触发&#xff0c;在一个事件发生后会执行里面的代码 &#xff08;before /after&#xff09; 语法…

Java集合——HashMap、HashTable以及ConCurrentHashMap异同比较

转发:https://www.cnblogs.com/zx-bob-123/archive/2017/12/26/8118074.html 0. 前言 HashMap和HashTable的区别一种比较简单的回答是&#xff1a; &#xff08;1&#xff09;HashMap是非线程安全的&#xff0c;HashTable是线程安全的。 &#xff08;2&#xff09;HashMap的…

java面试题39 给定includel.isp文件代码片段,如下

java面试题39 给定includel.isp文件代码片段&#xff0c;如下&#xff1a; <% pageContext.setAttribute(“User”,”HAHA”);%> ______ // 此处填写代码 给定include2.jsp文件代码片段如下&#xff1a; <%pageContext.getAttribute(“User”)%> 要求运行i…

圣诞快乐啊

Let It Snow! Let It Snow! Let It Snow! 原由 *Sakura* 上載 马上就圣诞了&#xff0c;早早祝福大家&#xff0c;圣诞快乐啊&#xff01; 转载于:https://www.cnblogs.com/joypen/archive/2008/12/24/1693224.html

不用AJAX框架实现AJAX效果

AJAX( Asynchronous JavaScript and XML),即&#xff1a;javascript和XML; 是一种进行页面局部异步处理数据的技术&#xff0c;用AJAX向服务器发送请求和获取服务器返回的数据并且更新到界面中&#xff0c;不是整个页面的刷新&#xff0c;而是HTML页面中使用JAVASCRIPT创建XMLH…

Java 面试题及答案

JAVA基础 JAVA中的几种基本类型&#xff0c;各占用多少字节&#xff1f; 下图单位是bit,非字节 1B8bit String能被继承吗&#xff1f;为什么&#xff1f; 不可以&#xff0c;因为String类有final修饰符&#xff0c;而final修饰的类是不能被继承的&#xff0c;实现细节不允许…

java面试题40 当编译并运行下面程序时会发生什么结果()

java面试题40 当编译并运行下面程序时会发生什么结果&#xff08;&#xff09; 1 2 3 4 5 6 7 8 9 10 11 public class Bground extends Thread{ public static void main(String argv[]){ Bground b new Bground(); b.run(); } public void sta…