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 ...
随机推荐
- java alibaba fastJson 遍历数组json
import java.util.*; import com.alibaba.fastjson.*; public class Test { public static void main(Strin ...
- Oracle 安全性一
创建和管理数据库用户账户 用户账户属性 用户账户拥有很多在创建账户时定义的属性.这些属性将应用于连接到账户的会话,在会话运行期间,DBA或会话可以更改其中一些属性. 用户名 身份验证方法 默认表空间 ...
- iOS 类似微博或朋友圈的信息流
1.先上图: image.png image.png 因为做过了好几次这样的需求,所以这次想到把它拿出来,下次再需要做的时候直接拿过来改改就能用了,节约时间. 2.功能 文字收起和展开,行高自 ...
- angular的生命周期
什么是生命周期 生命周期函数通俗的讲就是组件创建.组件更新.组件销毁的时候会触发的一系列的方法. 当 Angular 使用构造函数新建一个组件或指令后,就会按下面的顺序在特定时刻调用这些 生命周期钩子 ...
- python新建一个表格xls并写入数据
# -*- coding:utf-8 -*- import xlwt workbook = xlwt.Workbook() # 新建一个工作簿 sheet = workbook.add_sheet(& ...
- Windows 安装Redis程序
一.系统环境 1.硬件系统:Windows7 64位 2.软件环境: Redis 64位 3.2.100.Redis Desktop Manager. 二.Redis安装 下载地址:https://g ...
- 【JVM】TroubleShooting之内存溢出异常(OOM)与调优
1. OOM概述 If your application's execution time becomes longer and longer, or if the operating system ...
- MQTT入门2 -- “Error: Invalid password hash for user nick.”和“Connection Refused: not authorised.”
原文地址:https://www.cnblogs.com/NickQ/p/9277315.html 问题描述: 搭建好mosqitto环境后,利用无密码验证方式,成功通过测试. 但修改配置文件将匿名访 ...
- ACM1019:Least Common Multiple
Problem Description The least common multiple (LCM) of a set of positive integers is the smallest po ...
- class kind type sort区别
class多用于 级别比如高级货就是 first class,primary class等等,以此类推kind 和sort 基本一样,就像你说的,译为 种类,what kind of疑问,回答时用so ...