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(线段树+思维)的更多相关文章
- 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, ...
- 杭电多校第二场 hdu 6315 Naive Operations 线段树变形
Naive Operations Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 502768/502768 K (Java/Other ...
- HDU-DuoXiao第二场hdu 6315 Naive Operations 线段树
hdu 6315 题意:对于一个数列a,初始为0,每个a[ i ]对应一个b[i],只有在这个数字上加了b[i]次后,a[i]才会+1. 有q次操作,一种是个区间加1,一种是查询a的区间和. 思路:线 ...
- HDU 6315 Naive Operations(线段树区间整除区间)
Problem DescriptionIn a galaxy far, far away, there are two integer sequence a and b of length n.b i ...
- HDU 6315 Naive Operations(线段树+复杂度均摊)
发现每次区间加只能加1,最多全局加\(n\)次,这样的话,最后的答案是调和级数为\(nlogn\),我们每当答案加1的时候就单点加,最多加\(nlogn\)次,复杂度可以得当保证. 然后问题就是怎么判 ...
- HDU 6315.Naive Operations-线段树(两棵树合并)(区间单点更新、区间最值、区间求和)+思维 (2018 Multi-University Training Contest 2 1007)
6315.Naive Operations 题意很好理解,但是因为区间求和求的是向下取整的a[i]/b[i],所以直接分数更新区间是不对的,所以反过来直接当a[i]==b[i]的时候,线段树对应的位置 ...
- 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,另一种操 ...
- HDU 6315 Naive Operations(线段树+区间维护)多校题解
题意:a数组初始全为0,b数组题目给你,有两种操作: 思路:dls的思路很妙啊,我们可以将a初始化为b,加一操作改为减一,然后我们维护一个最小值,一旦最小值为0,说明至少有一个ai > bi,那 ...
- hdu Naive Operations 线段树
题目大意 题目链接Naive Operations 题目大意: 区间加1(在a数组中) 区间求ai/bi的和 ai初值全部为0,bi给出,且为n的排列,多组数据(<=5),n,q<=1e5 ...
- 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 ...
随机推荐
- ansible copy 模块 changed false 没有变化
在分发配置文件的时候,我用命令ansible big_hosthub -m copy -a "src=/home/clouder/deploy-conf.xml dest=/home/cl ...
- Centos 7下Nagios的安装及配置
简介 Nagios 是一款自动化运维工具,可以协助运维人员监控服务器的运行状况,并且拥有报警功能.本文章将介绍其安装方法和详细的配置方法. nagios 监控服务应用指南 本地资源:负载,CPU,磁盘 ...
- [Zedboard Linux系统移植]-从MACHINE_START開始
改动自:http://www.cnblogs.com/lknlfy/archive/2012/05/06/2486479.html 内核的启动过程? 3)内核的启动过程? arch/arm/kerne ...
- 书单list
2018年对我来说是个踩到狗屎的一年,不能说运气差,只能说过去所有的不良决策后果都集中到2018年爆发了,希望新的一年,都好起来.书单很短,买的确实很多,真的惭愧. 昨日世界 南渡北归 上学记 回忆录 ...
- SaltStack 自动化工具
1.服务端安装master: # yum -y install salt-master # yum -y install salt-minion 2.客户端安装minion: # yum -y ins ...
- Oracle分析函数巧妙使用
在 Oracle中使用Sql必须弄懂分析函数 Oracle开发专题之:分析函数(OVER) 1 Oracle开发专题之:分析函数2(Rank, Dense_rank, row_number) 6 Or ...
- Oracle中函数的使用
1.decode () 例子:它的写法如下decode('a','b','c','d'),其中a,b,c,d可以是其他函数也可以是数值,依据我们自己的情况来使用,它的含义是如果a=b,那么结果显示 ...
- com.alibaba.druid检测排查数据库连接数不释放定位代码
1.可能标题说的很不明白,其实就是这样一个情况,一个工程项目错误日志出现GetConnectionTimeoutException: wait millis 90000, active 22000的异 ...
- jdk8新特性-stream
一.什么是流stream 1.可理解为高级版本的 Iterator 不是集合元素,它不是数据结构并不保存数据,它是有关算法和计算的. 2.单向,不可往复 数据只能遍历一次,遍历过一次后即用尽了,就好比 ...
- MongoDB DBA 实践7-----MongoDB的分片集群操
一.使用Ranged Sharding对集合进行分片 从mongo连接到的shell中mongos,使用该sh.shardCollection()方法对集合进行分片. 注意: 必须已为集合所在的数据库 ...