BZOJ3038 上帝造题的七分钟

Time Limit: 3 Sec Memory Limit: 128 MB

Description

XLk觉得《上帝造题的七分钟》不太过瘾,于是有了第二部。
"第一分钟,X说,要有数列,于是便给定了一个正整数数列。
第二分钟,L说,要能修改,于是便有了对一段数中每个数都开平方(下取整)的操作。
第三分钟,k说,要能查询,于是便有了求一段数的和的操作。
第四分钟,彩虹喵说,要是noip难度,于是便有了数据范围。
第五分钟,诗人说,要有韵律,于是便有了时间限制和内存限制。
第六分钟,和雪说,要省点事,于是便有了保证运算过程中及最终结果均不超过64位有符号整数类型的表示范围的限制。
第七分钟,这道题终于造完了,然而,造题的神牛们再也不想写这道题的程序了。"
——《上帝造题的七分钟·第二部》
所以这个神圣的任务就交给你了。

Input

第一行一个整数n,代表数列中数的个数。
第二行n个正整数,表示初始状态下数列中的数。
第三行一个整数m,表示有m次操作。
接下来m行每行三个整数k,l,r,k=0表示给[l,r]中的每个数开平方(下取整),k=1表示询问[l,r]中各个数的和。

Output

对于询问操作,每行输出一个回答。

Sample Input

10
1 2 3 4 5 6 7 8 9 10
5
0 1 10
1 1 10
1 1 5
0 5 8
1 4 8

Sample Output

19
7
6

HINT

1:对于100%的数据,1<=n<=100000,1<=l<=r<=n,数列中的数大于0,且不超过1e12。

2:数据不保证L<=R 若L>R,请自行交换L,R,谢谢!

Solution

显然的,1e12的数可以在最多10次以内就可以被开为1,所以到了线段树一个区间,如果这个区间全是1,不管是询问还是修改都直接return回去。不然直接在线段树里面暴力修改。

#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#define lowbit(x) ((x)&(-(x)))
#define lc o<<1
#define rc o<<1|1
using namespace std;
#define REP(i,a,n) for(register int i=(a);i<=(n);++i)
#define PER(i,a,n) for(register int i=(a);i>=(n);--i)
#define FEC(i,x) for(register int i=head[x];i;i=g[i].ne)
template<typename A>inline void read(A&a){a=0;char c=0;int f=1;while(c<'0'||c>'9')(c=getchar())=='-'?f=-1:0;while(c>='0'&&c<='9')a=(a<<3)+(a<<1)+c-'0',c=getchar();f==-1?a=-a:0;}
char buf[30];template<typename A>inline void write(A a){if(a<0)putchar('-'),a=-a;int top=0;if(!a)buf[top=1]='0';while(a)buf[++top]=a%10+'0',a/=10;while(top)putchar(buf[top--]);}
typedef long long ll;typedef unsigned long long ull;
template<typename A,typename B>inline bool SMAX(A&x,const B&y){return y>x?x=y,1:0;}
template<typename A,typename B>inline bool SMIN(A&x,const B&y){return y<x?x=y,1:0;}const int N=100000+7;
int n,Q,opt,x,y;ll a[N];//错误笔记:似乎a数组就要开ll了 struct Node{ll maxv;}t[N<<2];
inline void Build(int o,int L,int R){if(L==R)t[o].maxv=a[L];else{int M=(L+R)>>1;Build(lc,L,M);Build(rc,M+1,R);t[o].maxv=max(t[lc].maxv,t[rc].maxv);}}
inline void Update(int o,int L,int R,int l,int r){if(t[o].maxv<=1)return;if(L==R)return (void)(t[o].maxv=sqrt(t[o].maxv));int M=(L+R)>>1;if(l<=M)Update(lc,L,M,l,r);if(r>M)Update(rc,M+1,R,l,r);t[o].maxv=max(t[lc].maxv,t[rc].maxv);
}
inline ll Sum(int o,int L,int R,int l,int r){if(t[o].maxv<=1)return (min(R,r)-max(L,l)+1)*t[o].maxv;if(L==R)return t[o].maxv;int M=(L+R)>>1;ll ans=0;if(l<=M)ans+=Sum(lc,L,M,l,r);if(r>M)ans+=Sum(rc,M+1,R,l,r);return ans;
}int main(){read(n);for(register int i=1;i<=n;++i)read(a[i]);Build(1,1,n);read(Q);for(register int i=1;i<=Q;++i){read(opt),read(x),read(y);if(x>y)x^=y^=x^=y;if(opt)write(Sum(1,1,n,x,y)),putchar('\n');else Update(1,1,n,x,y);}
}

转载于:https://www.cnblogs.com/hankeke/p/BZOJ3038.html

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

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

相关文章

java学习(29):大神指导(巩固练习)

/3使用Eclipse编写控制台应用程&#xff0c;使用do while循环处理从控制台接收不定数量的学生英语成绩&#xff0c; 统计不及格(小于60分)的成绩个数&#xff0c;大于等于90分的优秀成绩数量&#xff0c; 计算所有成绩的总分、平均分并输出相关统计结果到控制台/ import java.u…

java 反射 成员变量_java基础--反射(成员变量)

这里介绍通过反射获取对象的成员变量&#xff0c;以及修改成员变量。package Reflect.field;public class Point {int y;public int getY() {return y;}public void setY(int y) {this.y y;}public Point(int y) {super();this.y y;}}package Reflect.field;public class Ref…

nohup 详解

转&#xff1a;https://www.cnblogs.com/jinxiao-pu/p/9131057.html nohup nohup 命令运行由 Command参数和任何相关的 Arg参数指定的命令&#xff0c;忽略所有挂断&#xff08;SIGHUP&#xff09;信号。在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令&a…

java学习(30):巩固练习

/4使用Eclipse编写控制台应用程&#xff0c;利用for循环打印一个等腰三角图形/ public class test04 { public static void main(String[] args){ int x; int y; int z; for(x1;x<4;x)//外循环控制行数&#xff0c;总共四行 { for (y1;y<4-x ;y ) {//打印小星星前面的空格…

java get与post区别_HTTP请求(GET与POST区别)和响应

HTTP有两部分组成&#xff1a;请求与响应&#xff0c;下面分别整理。一&#xff0e;HTTP请求1&#xff0e;HTTP请求格式&#xff1a;[]在HTTP请求中&#xff0c;第一行必须是一个请求行(request line)&#xff0c;用来说明请求类型、要访问的资源以及使用的HTTP版本。紧接着是一…

07.用户故事与敏捷方法——优秀用户故事准则笔记

00.一个更好的办法是换一种方式编写故事&#xff0c;每个故事都提供某种程度的完整&#xff08;end-to-end&#xff09;的功能。 01.尽管不十分完美&#xff0c;即使只提供部分功能&#xff0c;但只要发布的功能可以跑&#xff0c;就可以放心地把应用程序发布给用户使用。 02.一…

java学习(31):for循环

/5使用Eclipse编写控制台应用程&#xff0c;利用for循环计算输入的两个整数的最大公约数和最小公倍数。/ import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner innew Scanner(System.in); System.out.println(“输入两个整数”);…

java jxl 写 excel文件_Java使用jxl写入Excel文件

首先添加jxl的maven依赖&#xff1a;net.sourceforge.jexcelapijxl2.6.12示例代码&#xff1a;import java.io.File;import java.io.IOException;import jxl.Workbook;import jxl.write.Label;import jxl.write.WritableSheet;import jxl.write.WritableWorkbook;import jxl.wr…

kali BEEF-XSS启动报错解决

kali Linux自带BEEF框架&#xff0c;长时间搁置后启动报错&#xff1a; rootkali:/usr/share/beef-xss# ./beef Traceback (most recent call last): 14: from ./beef:32:in <main> 13: from /usr/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in require 12:…

java学习(32):巩固练习

/6使用Eclipse编写控制台应用程&#xff0c;利用循环模仿一个用户的注册&#xff0c; 输入用户名和密码&#xff0c;判断用户输入的用户名是否长度位于4到16个字符之间&#xff0c; 如果不满足要求则应能够让用户重写输入&#xff0c;判断密码长度是否在6到16个字符之间 &#…

java 注释引用_Eclipse java 注释 --引用

引用--设置注释模板的入口&#xff1a; Window->Preference->Java->Code Style->Code Template 然后展开Comments节点就是所有需设置注释的元素啦。现就每一个元素逐一介绍&#xff1a;文件(Files)注释标签&#xff1a;/** * Title: ${file_name} * Package ${pa…

CSS单位和颜色

CSS单位 尺寸 单位描述%百分比in英寸cm厘米mm毫米em 1em 等于当前的字体尺寸。 2em 等于当前字体尺寸的两倍。 例如&#xff0c;如果某元素以 12pt 显示&#xff0c;那么 2em 是24pt。 在 CSS 中&#xff0c;em 是非常有用的单位&#xff0c;因为它可以自动适应用户所使用的字体…

java学习(33):巩固练习

/7使用Eclipse编写控制台应用程&#xff0c;利用循环统计用户从控制台输入的N多个整数&#xff0c;对其进行依次判断&#xff0c; 对偶数进行累加&#xff0c;对奇数进行累加&#xff0c;最后比较奇数和与偶数的的差&#xff0c;输出如下信息 偶数个数15&#xff0c;奇数个数10…

java面向对象程序设计董小园_java面向对象程序设计(董小园版).doc

目 录TOC \o "1-3" \h \z \u HYPERLINK \l "_Toc238553494" 第1章了解Java PAGEREF _Toc238553494 \h 2HYPERLINK \l "_Toc238553495" 第2章面向对象的“对象” PAGEREF _Toc238553495 \h 7HYPERLINK \l "_Toc238553496" 第3章对象的属…

[HAOI2008]糖果传递 结论题

题目描述 有\(n(n<1000000)\)个小朋友坐成一圈&#xff0c;每人有\(a_i\)个糖果。每人只能给左右两人传递糖果。每人每次传递一个糖果代价为\(1\)&#xff0c;求使所有人糖果数相等的最小代价。 暴力的做法比较显然&#xff0c;有\(30\)分&#xff0c;这里就不再赘述了。 推…

java学习(34):巩固练习

/1 使用Eclipse编写控制台应用程, 提示老师预计输入&#xff1f;个学生成绩&#xff0c;接收此数后&#xff0c;最为创建int类型数组的大小限制&#xff0c; 使用循环统计包含N个元素的数组&#xff0c;对包含的成绩进行统计&#xff0c;计算如下&#xff1a; 共接收成绩数量是…

artTemplate/template.js模板将时间戳格式化为正常的日期

1&#xff1a;引用<script type"text/javascript" src"../js/artTemplate/template.js"></script> 2&#xff1a;在正常渲染中引入方法 | timestamp: yyyy-MM-dd hh:mm:ss <div>开始时间<span>{{value.endTime | timestamp: yyyy-…

java学习(35):巩固练习

/2使用Eclipse编写控制台应用程,将给定的如下数组进行互换存储&#xff0c;互换原则如下所示 源整型数组 { 56,28,15,999,30,65,12,77} 互换后数组元素排列 {77, 12,15,999,30,65, 28, 56}/ public class test04 { public static void main(String[] args){ int[] arr{56,28,15…

java 并发 主键_高并发数据库自增主键分析

在一般情况下&#xff0c;在新增领域对象后&#xff0c;都需要获取对应的主键值。使用应用层来维护主键&#xff0c;在一定程度上有利于程序性能的优化和应用移植性的提高。在采用数据库自增主键的方案里&#xff0c;如果JDBC驱动不能绑定新增记录对应的主键&#xff0c;就需要…

单实例数据库和多实例数据库

java持续学习中&#xff0c;暂时说说工作上学到的知识 单实例数据库模式 单实例模式下,一个数据库只能通过一个实例进行访问 RAC(Real Application Clusters)集群模式下,共享数据库文件,一个数据库生成多个相同的实例被用户访问。