题目

链接

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

  • 给$[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. Spring mybatis源码篇章-Mybatis主文件加载

    通过阅读源码对实现机制进行了解有利于陶冶情操,承接前文Spring mybatis源码篇章-SqlSessionFactory 前话 本文承接前文的内容继续往下扩展,通过Spring与Mybatis的 ...

  2. Netty源码剖析-构建链接

    参考文献:极客时间傅健老师的<Netty源码剖析与实战>Talk is cheap.show me the code! ----主线: 和启动一样也是有两个线程完成的,boss threa ...

  3. (二)Spring中的ioc

    目录 Spring的ioc操作 ioc底层使用的技术 ioc底层原理 ioc入门案例 bean管理(xml方式) IOC和DI的区别 Spring整合WEB的原理 Spring 整合的具体操作 Spr ...

  4. centos7 宝塔php7安装mongodb扩展

    一.下载.解压源码 下载地址:https://pecl.php.net/package/mongodb wget -c https://pecl.php.net/get/mongodb-1.5.3.t ...

  5. hdu 3500 还是搜索

    这道题目由于每走一步的时候毛毛球是可以变换的 换言之 主体不唯一 所以这里搜索的设计有变化 再就是几个回溯的过程要注意.,.  小心使得万年船 #include <iostream> #i ...

  6. Scala学习二十二——定界延续

    一.本章要点 延续让你可以回到程序执行当中之前的某个点; 可以在shift块中捕获延续 延续函数一直延展到包含它的reset块的尾部 延续所谓的”余下的运算“,从包含shift的表达式开始,到包含它的 ...

  7. fish redux 个人理解

    fish redux 理解 fish redux是什么 Fish Redux 是一个基于 Redux 数据管理的组装式 flutter 应用框架, 它特别适用于构建中大型的复杂应用. 它的特点是配置式 ...

  8. C#动态生成Word文档并填充数据

    C#也能动态生成Word文档并填充数据 http://www.cnblogs.com/qyfan82/archive/2007/09/14/893293.html 引用http://blog.csdn ...

  9. 关于spring中事务管理的几件小事

    1.Spring中的事务管理 作为企业级应用程序框架,Spring在不同的事务管理API之上定义了一个抽象层.而应用程序开发人员不必了解底层的事务管理API,就可以使用Spring的事务管理机制. S ...

  10. 重拾MVC——第二天:Vue学习与即时密码格式验证

    今天是复习MVC的第二天,准备自己写一个后台管理,然后慢慢写大,做全. 个人感觉做 Web 的,前端知识是必备的,所有今天学习了一下 Vue,很多人用这个,我以前没有用过,今天把它补起来. 比较了各个 ...