链接:HDU-6315:Naive Operations

题意:

In a galaxy far, far away, there are two integer sequence a and b of length n.
b is a static permutation of 1 to n. Initially a is filled with zeroes.
There are two kind of operations:
1. add l r: add one for al,al+1...ar
2. query l r: query ∑ri=l⌊ai/bi⌋
题解:每次更新时,直接将 b 数组的对应区间都减一,如果发现有零,就将对应位置的答案加一并重置回原b数组对应的数。

#include <bits/stdc++.h>
using namespace std; const double EPS = 1e-;
const int INF = 0x3f3f3f3f;
const int mod = 1e9 + ;
const int maxn = 1e5 + ;
int n, m, x, y;
int a[maxn];
char q[maxn];
struct Node{int mi, sum, add;} T[maxn<<]; void Build(int l, int r, int rt)
{
if(l == r){
T[rt].mi = a[l];
T[rt].sum = ;
T[rt].add = ;
return ;
} int mid = (l + r) >> ; Build(l, mid, rt<<);
Build(mid + , r, rt<<|); T[rt].mi = min(T[rt<<].mi, T[rt<<|].mi);
T[rt].sum = T[rt<<].sum + T[rt<<|].sum;
T[rt].add = T[rt<<].add + T[rt<<|].add;
} void Pushdown(int rt, int l, int r)
{
if(!T[rt].add) return; int mid = (l + r) >> ; T[rt<<].mi += T[rt].add;
T[rt<<|].mi += T[rt].add; T[rt<<].add += T[rt].add;
T[rt<<|].add += T[rt].add; T[rt].add = ;
} void Update(int L, int R, int l, int r, int rt, bool ok)
{
if(L <= l && r <= R){
if(ok){
T[rt].add--;
T[rt].mi--;
}
if(T[rt].mi > ) return;
if(l == r){
if(T[rt].mi == ) T[rt].sum++, T[rt].mi = a[l];
return;
}
ok = false;
}
Pushdown(rt, l, r); int mid = (l + r) >> ; if(L <= mid) Update(L, R, l, mid, rt<<, ok);
if(R > mid) Update(L, R, mid + , r, rt<<|, ok); T[rt].mi = min(T[rt<<].mi, T[rt<<|].mi);
T[rt].sum = T[rt<<].sum + T[rt<<|].sum;
} int Query(int L, int R, int l, int r, int rt)
{
if(L <= l && r <= R) return T[rt].sum; int ans = , mid = (l + r) >> ; if(L <= mid) ans += Query(L, R, l, mid, rt<<);
if(R > mid) ans += Query(L, R, mid + , r, rt<<|); return ans;
} int main()
{
while(scanf("%d%d", &n, &m) != EOF){
for(int i = ; i <= n; i++) scanf("%d", &a[i]); Build(, n, ); while(m--){
scanf("%s%d%d", q, &x, &y);
if(q[] == 'a') Update(x, y, , n, , true);
else printf("%d\n", Query(x, y, , n, ));
}
} return ;
}

HDU-6315:Naive Operations(线段树+思维)的更多相关文章

  1. HDU - 6315 Naive Operations (线段树+思维) 2018 Multi-University Training Contest 2

    题意:数量为N的序列a和b,a初始全为0,b为给定的1-N的排列.有两种操作:1.将a序列区间[L,R]中的数全部+1:2.查询区间[L,R]中的 ∑⌊ai/bi⌋(向下取整) 分析:对于一个位置i, ...

  2. 杭电多校第二场 hdu 6315 Naive Operations 线段树变形

    Naive Operations Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 502768/502768 K (Java/Other ...

  3. HDU-DuoXiao第二场hdu 6315 Naive Operations 线段树

    hdu 6315 题意:对于一个数列a,初始为0,每个a[ i ]对应一个b[i],只有在这个数字上加了b[i]次后,a[i]才会+1. 有q次操作,一种是个区间加1,一种是查询a的区间和. 思路:线 ...

  4. HDU 6315 Naive Operations(线段树区间整除区间)

    Problem DescriptionIn a galaxy far, far away, there are two integer sequence a and b of length n.b i ...

  5. HDU 6315 Naive Operations(线段树+复杂度均摊)

    发现每次区间加只能加1,最多全局加\(n\)次,这样的话,最后的答案是调和级数为\(nlogn\),我们每当答案加1的时候就单点加,最多加\(nlogn\)次,复杂度可以得当保证. 然后问题就是怎么判 ...

  6. HDU 6315.Naive Operations-线段树(两棵树合并)(区间单点更新、区间最值、区间求和)+思维 (2018 Multi-University Training Contest 2 1007)

    6315.Naive Operations 题意很好理解,但是因为区间求和求的是向下取整的a[i]/b[i],所以直接分数更新区间是不对的,所以反过来直接当a[i]==b[i]的时候,线段树对应的位置 ...

  7. HDU - 6315(2018 Multi-University Training Contest 2) Naive Operations (线段树区间操作)

    http://acm.hdu.edu.cn/showproblem.php?pid=6315 题意 a数组初始全为0,b数组为1-n的一个排列.q次操作,一种操作add给a[l...r]加1,另一种操 ...

  8. HDU 6315 Naive Operations(线段树+区间维护)多校题解

    题意:a数组初始全为0,b数组题目给你,有两种操作: 思路:dls的思路很妙啊,我们可以将a初始化为b,加一操作改为减一,然后我们维护一个最小值,一旦最小值为0,说明至少有一个ai > bi,那 ...

  9. hdu Naive Operations 线段树

    题目大意 题目链接Naive Operations 题目大意: 区间加1(在a数组中) 区间求ai/bi的和 ai初值全部为0,bi给出,且为n的排列,多组数据(<=5),n,q<=1e5 ...

  10. hdu 6315 Naive Operations (2018 Multi-University Training Contest 2 1007)

    Naive Operations Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 502768/502768 K (Java/Other ...

随机推荐

  1. Mybatis Plus启动注入 SQL 原理分析

    1) 问题: xxxMapper 继承了 BaseMapper<T>, BaseMapper 中提供了通用的 CRUD 方法, 方法来源于 BaseMapper, 有方法就必须有 SQL, ...

  2. HDU 1142 A Walk Through the Forest(最短路+记忆化搜索)

    A Walk Through the Forest Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Jav ...

  3. leetcode -50. Pow(x, n) Accepted

    前言:其实之前自己也有了解关于算法数据结构的一点内容,但是都是用相应的开发工具来写相应的代码,今天面试的时候直接leetcode来写代码,还是用的体内根深蒂固的C和Java来解的题,毕竟目前没见支持O ...

  4. 求1!+2!+3!+4!+5!+6!+7!+8!+9!+10!+...+N! N阶阶乘求和算法 JAVA C Python

    一行代码算出1!+2!+3!+4!+5!+6!+7!+8!+9!+10!+...+N!   N阶阶乘求和 时间复杂度为O(n) 空间复杂度为O(1) 对于任意正整数N  求1!-N!一行算出和给定求1 ...

  5. java ssm 后台框架平台 项目源码 websocket 即时通讯 IM quartz springmvc

    官网 http://www.fhadmin.org/D 集成安全权限框架shiro  Shiro 是一个用 Java 语言实现的框架,通过一个简单易用的 API 提供身份验证和授权,更安全,更可靠E ...

  6. archLinux 学习笔记--mlocate的安装与使用

    locate - 查找文件的简单方法 locate 程序会执行一次快速的路径名数据库搜索,并且输出每个与给定子字符串相匹配的路径名. 使用时却发现archlinux出现 bash: locate:未找 ...

  7. 11.1 js中级,数据类型、数据储存方式、作用域内存空间的区别以及例识别。

    一. 基本数据类型和引用数据类型的区别. 1.基本数据类型:基本数据类型就是简单的操作值. 2.引用数据类型:就是把引用的地址赋给变量. 堆内存: 就是存放代码块的,存放形式有两种 1)对象以键值对的 ...

  8. svg路径动画心得

    svg动画,随着路线运动,项目中需要用到,接触的时候感觉很高级,但是不会-无从下手呀!于是在网上找相关资料,先借鉴再修改成自己的. <svg width="500" heig ...

  9. Hadoop(二)CentOS7.5搭建Hadoop2.7.6完全分布式集群

    一 完全分布式集群(单点) Hadoop官方地址:http://hadoop.apache.org/ 1  准备3台客户机 1.1防火墙,静态IP,主机名 关闭防火墙,设置静态IP,主机名此处略,参考 ...

  10. 树莓派3B+学习笔记:7、挂载exfat格式U盘

    树莓派的官方系统,默认不支持exfat格式U盘挂载. 插入exfat格式U盘会出现以下错误提示: 安装exfat-fuse后可以正常识别,需要在命令行执行以下命令,按“y”键回车确认: sudo ap ...