LOJ#6281. 数列分块入门 5

内存限制:256 MiB时间限制:500 ms标准输入输出
题目类型:传统评测方式:文本比较
上传者: hzwer
提交提交记录统计讨论
1
测试数据

题目描述

给出一个长为 nnn 的数列,以及 nnn 个操作,操作涉及区间开方,区间求和。

输入格式

第一行输入一个数字 nnn。

第二行输入 nnn 个数字,第 i 个数字为 aia_iai​​,以空格隔开。

接下来输入 nnn 行询问,每行输入四个数字 opt\mathrm{opt}opt、lll、rrr、ccc,以空格隔开。

若 opt=0\mathrm{opt} = 0opt=0,表示将位于 [l,r][l, r][l,r] 的之间的数字都开方。

若 opt=1\mathrm{opt} = 1opt=1,表示询问位于 [l,r][l, r][l,r] 的所有数字的和。

输出格式

对于每次询问,输出一行一个数字表示答案。

样例

样例输入

4
1 2 2 3
0 1 3 1
1 1 4 4
0 1 2 2
1 1 2 4

样例输出

6
2

数据范围与提示

对于 100% 100\%100% 的数据,1≤n≤50000,−231≤others 1 \leq n \leq 50000, -2^{31} \leq \mathrm{others}1n50000,231​​others、ans≤231−1 \mathrm{ans} \leq 2^{31}-1ans231​​1。

 

 

这道题的难点在于如何维护开根这个神奇的操作

我自己测的是1e7的数差不多开五六次根就会变成1,所以我们直接维护整个块内的数是否变成了1就可以了

 

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#define int long long 
using namespace std;
const int MAXN=1e5+10;
const int INF=1e8+10;
inline char nc()
{static char buf[MAXN],*p1=buf,*p2=buf;return p1==p2&&(p2=(p1=buf)+fread(buf,1,MAXN,stdin),p1==p2)?EOF:*p1++;
}
inline int read()
{char c=nc();int x=0,f=1;while(c<'0'||c>'9'){if(c=='-')f=-1;c=nc();}while(c>='0'&&c<='9'){x=x*10+c-'0';c=nc();}return x*f;
}
int N;
int a[MAXN],block,L[MAXN],R[MAXN],belong[MAXN],sum[MAXN],flag[MAXN];void Sqrt(int l,int r)
{for(int i=l;i<=min(r,R[l]);i++){sum[belong[i]]-=a[i];a[i]=sqrt(a[i]);sum[belong[i]]+=a[i];}if(belong[l]!=belong[r])for(int i=L[r];i<=r;i++)sum[belong[i]]-=a[i],a[i]=sqrt(a[i]),sum[belong[i]]+=a[i];for(int i=belong[l]+1;i<=belong[r]-1;i++){if(flag[i]) {continue;}flag[i]=1;for(int j=L[i*block];j<=R[i*block];j++){sum[i]-=a[j];a[j]=sqrt(a[j]);sum[i]+=a[j];if(a[j]>1) flag[i]=0;}}
}
int Query(int l,int r)
{int ans=0;for(int i=l;i<=min(r,R[l]);i++)ans+=a[i];if(belong[l]!=belong[r])for(int i=L[r];i<=r;i++)ans+=a[i];for(int i=belong[l]+1;i<=belong[r]-1;i++)ans+=sum[i];return ans;
}
main()
{#ifdef WIN32freopen("a.in","r",stdin);// freopen("b.out","w",stdout);#else#endifN=read();block=sqrt(N);for(int i=1;i<=N;i++) a[i]=read();for(int i=1;i<=N;i++) belong[i]=(i-1)/block+1,L[i]=(belong[i]-1)*block+1,R[i]=belong[i]*block;for(int i=1;i<=N;i++) sum[belong[i]]+=a[i];for(int i=1;i<=N;i++){int opt=read(),l=read(),r=read(),c=read();if(opt==0) Sqrt(l,r); else  printf("%d\n",Query(l,r));}return 0;
}

  

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

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

相关文章

版本控制工具历史的10个里程碑

导读&#xff1a;作者Eric Raymond在flourish上发表的一篇《Astonishments, ten, in the history of version control》&#xff0c;文中总结了版本控制工具的重要10个里程碑&#xff0c;一起与开发者分享下。 如果你想要了解真正的历史&#xff0c;你需要回到在打孔卡上进行人…

php把语音转成帧,[转载]用TCP/IP实现自己简单的应用程序协议:成帧器部分

在前面《字节和字符,对信息进行编码》&#xff0c;《Socket>流&#xff0c;TCP连接,TCP可靠性概述》一系列的随笔中我们已经表述了相应的理论知识&#xff0c;现在可以动手实现一个自己的应用程序协议。将 数据转换成在线路上传输的字节序列只完成了一半的工作&#xff0c;在…

实体联系图简介

通常&#xff0c;使用实体联系图(entity relationship diagram)来建立数据模型。可以把实体联系图简称为ER图&#xff0c;相应地可把用ER图描绘的数据模型称为ER模型。 ER图中包含了实体(即数据对象)、关系和属性3种基本成分&#xff0c;通常用矩形框代表实体&#xff0c;用连…

Flask爱家租房--城区信息

0.效果展示 城市列表使用缓存的过程 1.后端代码 # coding:utf-8from . import api from flask import g, current_app, jsonify, request, session from ihome.utils.response_code import RET from ihome.models import Area, House, Facility, HouseImage, User, Order from …

数值计算算法-多项式插值算法的实现与分析

数值计算是指在数值分析领域中的算法。数值分析是专门研究和数字以及近似值相关的数据问题&#xff0c;数值计算在数值分析的研究中发挥了特别重要的作用。 多项式插值是计算函数近似值的一种方法。其中函数值仅在几个点上已知。 该算法的基础是建立级数小于等于n的一个插值多项…

HIVE ORC 报错ClassCastException

HIVE ORC格式的表查询报错 Failed with exception java.io.IOException:java.lang.ClassCastException: org.apache.hadoop.hive.ql.io.orc.OrcStruct cannot be cast to org.apache.hadoop.io.BinaryComparable 建表语句如下&#xff1a; CREATE EXTERNAL TABLE test_orc( te…

程序型语言VS.编译型语言

导读&#xff1a;每日[快讯精选]是由CSDN研发频道推出的特色栏目&#xff0c;每一天我们将从国外技术媒体(例如Hacker News、Reddit...等等)中挑选出有价值的新闻简讯&#xff0c;让您在第一时间掌握业界主流的技术文摘&#xff0c;每天清晨为您献上第一份技术早餐。 [1]程序型…

ancestral 箭头符号,译林版《牛津高中英语》模块五 高二上学期

《牛津英语》由译林出版社和牛津大学出版社联合编写出版。通过在南京和苏州开始的试用&#xff0c;取得了非常良好的效果&#xff0c;己在省内全面推广。有人认为新教材在教育观念和编排体系上的改革力度是八十年代以来最大的一次。它带给我们一线教师的冲击无疑是巨大的。二、…

[NOI2012]骑行川藏

题解&#xff1a; 我发现拉格朗日乘数法真是个好东西。。 我是不会说我数学竞赛求最值都是用这个东西的 由于我不太会打那个符号就用li代表通常偏导数中的lanmuda 。。。 这题里化简一下就可以得到 2 li * ki * ​(vi​−vi′​)* vi^2​1 然后一旦li确定 我们会发现这个三次函…

MAC地址和IP地址的关系

简单地说&#xff1a;ip地址是服务商给你的&#xff0c;mac地址是你的网卡物理地址。 一、IP地址 对于IP地址&#xff0c;相信大家都很熟悉&#xff0c;即指使用TCP/IP协议指定给主机的32位地址。IP地址由用点分隔开的4个8八位组构成&#xff0c;如192.168.0.1就是一个IP地址…

Linux中断 - tasklet

一、前言 对于中断处理而言&#xff0c;linux将其分成了两个部分&#xff0c;一个叫做中断handler&#xff08;top half&#xff09;&#xff0c;属于不那么紧急需要处理的事情被推迟执行&#xff0c;我们称之deferable task&#xff0c;或者叫做bottom half&#xff0c;。具体…

数字电视制播设备间的文件交换格式

在现今的数字电视演播室中&#xff0c;设备之间基本上采用信号流连接方式&#xff0c;如SDI、STDI、模拟YUV、VBS等信号流。在非线性编辑系统和播出系统与服务器之间的连接&#xff0c;还有基于MPEG-2传输流等的信号连接方式。基于信号流连接方式的主要特点是&#xff0c;传送时…

oracle 位移运算符,Oracle“(+)”运算符

在Oracle中&#xff0c;()表示JOIN中的“可选”表。 所以在你的查询中&#xff0c;select a.id, b.id, a.col_2, b.col_2, ... from a,b where a.idb.id()这是一个左外加B表与一个表。 就像现代的左连接查询一样。 (它将返回a表的所有数据&#xff0c;而不会丢失在另一边的数据…

JAVA-数据类型-复习

JAVA-数据类型-复习 Java中&#xff0c;一共有8种数据类型&#xff0c;4种整型&#xff0c;2种浮点型&#xff0c;1种用于表示Unicode编码的字符单元的字符类型char&#xff0c;1种布尔类型。 整型 类型存储需求&#xff08;字节&#xff09;一个字节包含8个位取值范围byte1-12…

什么是实体-联系图(ER图)

实体-联系图&#xff08;ER图&#xff09;数据模型中包含3种相互关联的信息&#xff1a;数据对象、数据对象的属性及数据对象彼此间相互连接的关系。 1.数据对象 数据对象是对软件必须理解的复合信息的抽象。所谓符合信息是指具有一系列不同性质或属性的事物&#xff0c;仅有单…

记录的习惯

记录的习惯 书籍是人类进步的阶梯&#xff0c;承载了人类文明进步的历程。大多数人都写过日记&#xff0c;但不知道有多少人重视过日记。常常我们会用相机记录一些生活中的场景&#xff0c;然后收藏起来&#xff0c;等到若干年后再拿出来看&#xff0c;总能感觉到很温馨很美好。…

php 去掉实体,用PHP删除除5个预定义HTML实体之外的所有实体的最佳方法-用于XHTML5输出...

我目前正在尝试提供XHTML5.目前,我在正在处理的页面上提供XHTML 1.1 Strict.那就是我为有能力的浏览器所做的.对于那些不接受XML编码数据的人,我会严格遵循HTML4.1.在尝试使用HTML5进行试验时,以HTML5格式交付时,所有功能或多或少都可以按预期工作.但是,作为XHTML5交付时,我遇到…

Flask爱家租房--发布新房源(保存房屋基本信息)

0.页面展示效果 1.后端代码 api.route("/houses/info", methods["POST"]) login_required def save_house_info():"""保存房屋的基本信息前端发送过来的json数据{"title":"","price":"","ar…

今后最有前途的媒体格式 MXF

MXF格式已经被推出几年了&#xff0c;从当初一个陌生的不为人们重视的格式逐渐获得了业内人士的认知和认可&#xff0c;现如今正被广泛应用于广播电视与后期制作领域&#xff0c;且有不断扩大之势&#xff0c;松下公司推出的基于PII卡的无磁带式标清摄像机&#xff0c;它所采用…