题目

链接

题意:对一个数列进行以下两种操作:

  • 给$[l,r]$中的每个数开平方(下取整)
  • 询问$[l,r]$中各个数的和

解决方法

显然,区间开平方不满足区间可加性,所以对区间中每个数开平方不能通过标记完成,只能使用暴力的单点修改。因为1e12的数开方6次就变成了1,所以需要修改的次数实际上很少。同时维护一个区间最大值maxv,如果maxv大于1才需要进行开平方操作。

 #include<bits/stdc++.h>
using namespace std; typedef long long ll;
const int INF = 0x3f3f3f3f;
const int maxn = + ;
ll maxv[maxn << ], sum[maxn << ];
int n;
ll a[maxn]; void build(int o, int L, int R)
{
//printf("o:%d L:%d R:%d\n", o, L, R);
int M = L + (R-L) / ;
if(L == R)
{
maxv[o] = a[L];
sum[o] = a[L];
}
else
{
build(*o, L, M);
build(*o+, M+, R);
maxv[o] = max(maxv[*o], maxv[*o+]);
sum[o] = sum[*o] + sum[*o+];
}
} int ql, qr; //查询[ql, qr]中的和
void query(int o,int L,int R, ll& ssum)
{
//printf("o:%d L:%d R:%d\n", o, L, R);
if(ql <= L && R <= qr)
{
//maxx = maxv[o];
ssum = sum[o];
}
else
{
int M = L + (R - L) / ;
//maxx = -INF;
ll lsum =, rsum = ;
if(ql <= M) query(*o, L, M, lsum);
if(qr > M) query(*o+, M+, R, rsum);
//maxx = max(lmax, rmax);
ssum = lsum + rsum; }
} int cl, cr; //修改sqrt(A[cl...cr])
void update(int o, int L, int R)
{
//printf("o:%d L:%d R:%d\n", o, L, R);
if(L == R) //更新叶子结点
{
maxv[o] = (ll)sqrt(maxv[o]);
sum[o] = maxv[o];
}
else
{
int M = L + (R-L)/;
if(cl <= M && maxv[*o] > ) update(*o, L ,M);
if(cr > M && maxv[*o+] > ) update(*o+, M+, R);
maxv[o] = max(maxv[*o], maxv[*o+]); //更新非叶子结点
sum[o] = sum[*o] + sum[*o+];
}
} int main()
{
scanf("%d", &n);
for(int i = ;i <= n;i++) scanf("%lld", &a[i]); build(, , n); int T;
scanf("%d", &T);
while(T--)
{
int order, l, r;
scanf("%d%d%d", &order, &l, &r);
if(l > r) swap(l, r);
if(order == )
{
cl = l; cr = r;
update(, , n);
}
else
{
ll ans = ;
ql = l; qr = r;
query(, , n, ans);
printf("%lld\n", ans);
}
} return ;
}

看讨论区还有分块、树状数组+并查集等做法,Orz.

P4145——线段树点修改&&模板题的更多相关文章

  1. P1198最大数——线段树点修改&&模板题

    题目 题目链接 大意:维护一个数列,有两种操作: 查询操作Q  L:查询当前数列中末尾L个数中的最大的数 插入操作A  n:将n加上t再对D取模,将所得值插入数列末尾 解决方案 由题意知,只有两种操作 ...

  2. 【BZOJ 3196】二逼平衡树 线段树套splay 模板题

    我写的是线段树套splay,网上很多人写的都是套treap,然而本蒟蒻并不会treap 奉上sth神犇的模板: //bzoj3196 二逼平衡树,支持修改某个点的值,查询区间第k小值,查询区间某个值排 ...

  3. codevs 1082 线段树练习3 模板题

    #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ],sum[ ...

  4. HDU1698:Just a Hook(线段树区域更新模板题)

    http://acm.hdu.edu.cn/showproblem.php?pid=1698 Problem Description In the game of DotA, Pudge’s meat ...

  5. FZU Problem 2171 防守阵地 II (线段树区间更新模板题)

    http://acm.fzu.edu.cn/problem.php?pid=2171 成段增减,区间求和.add累加更新的次数. #include <iostream> #include ...

  6. HDU 1166 敌兵布阵(线段树/树状数组模板题)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  7. E - Just a Hook HDU - 1698 线段树区间修改区间和模版题

    题意  给出一段初始化全为1的区间  后面可以一段一段更改成 1 或 2 或3 问最后整段区间的和是多少 思路:标准线段树区间和模版题 #include<cstdio> #include& ...

  8. BZOJ 2243 染色 | 树链剖分模板题进阶版

    BZOJ 2243 染色 | 树链剖分模板题进阶版 这道题呢~就是个带区间修改的树链剖分~ 如何区间修改?跟树链剖分的区间询问一个道理,再加上线段树的区间修改就好了. 这道题要注意的是,无论是线段树上 ...

  9. 线段树(SegmentTree)基础模板

    线段树模板题来源:https://www.lintcode.com/problem/segment-tree-build/description 201. 线段树的构造 /** * Definitio ...

随机推荐

  1. DB2创建EMP和DEPT并进行基础操作

    一.DB2创建EMP和DEPT测试表 --DB2创建测试表 CREATE TABLE TEST.EMP (EMPNO INTEGER NOT NULL, ENAME ), JOB ), MGR INT ...

  2. C++中如何设计一个类只能在堆或者栈上创建对象,面试题

    设计一个类,该类只能在堆上创建对象 将类的构造函数私有,拷贝构造声明成私有.防止别人调用拷贝在栈上生成对象. 提供一个静态的成员函数,在该静态成员函数中完成堆对象的创建 注意 在堆和栈上创建对象都会调 ...

  3. dede按照权重排序dede:list和得的:arclist

    dede:list 的方法 1.找到"根目录\include\arc.listview.class.php"文件. 2.修改代码:在文件第727行处添加按weight排序判断代码( ...

  4. 笔记-4:python组合数据类型

    1.字符串(str) 字符串是字符的序列表示, 根据字符串的内容多少分为单行字符串和多行字符串. 单行字符串可以由一对单引号(') 或双引号(")作为边界来表示, 单引号和双引号作用相同. ...

  5. S02_CH13_ AXI_PWM 实验

    S02_CH13_ AXI_PWM 实验 当学习了上一章的协议介绍内容后,开发基于这些协议的方案已经不是什么难事了,关键的一点就是从零到有的突破了.本章就以AXI-Lite总线实现8路LED自定义IP ...

  6. [第二季ZYNQ] [南京米联]ZYNQ第二季更新完毕课程共计16节课

    ZYNQ第二季更新完毕课程共计16节课全部免费 [第二季ZYNQ]                                                                    ...

  7. 牛客 72C 小H和游戏 (动态点分治)

    大意: 给定树, 每个点初始权值0, 每次询问给出$x$, $x$权值+1, 求距离$x$不超过2的权值和. 这题数据范围过大, 动态点分治卡不过去, 考虑其他做法 考虑每次只加范围$1$, c[0] ...

  8. c# 图文添加文字斜水印 优化

    之前一篇给图片加水印的功能,加出来水印的图片位置有一点问题,并且如果图片分辨率有变动的话,水印会有层次不齐的问题. 目前只能优化到增加一条居中显示的斜水印,在不同分辨率不同大小的图片中,都能保证文字水 ...

  9. EFcore的 基础理解<三> 多对多,唯一约束

    唯一约束,替代键. modelBuilder.Entity<Car>() .HasAlternateKey(c => new { c.State, c.LicensePlate }) ...

  10. Tomat服务器学习

    Tomat服务器学习 使用的是Redhat版本的Tomcat 目录结构 bin:可执行文件 conf:配置文件 lib:tomcat运行时依赖的jar包 logs:日志文件 temp:临时文件 web ...