题目链接

题目大意:

定义只含数字$4,7$的数字为幸运数, 给定序列, 区间加正数, 区间询问多少个幸运数

题解:

对于每一个数, 求出它和第一个比它大的幸运数之差, 则问题转化为区间加,查询$0$的个数

可以维护最大值即最大值的个数, 对于最大值$<=0$直接打标记修改即可

对于最大值$>0$的暴力转移到下一个幸运数,

因为对于每个幸运数来说, 最多有n个元素暴力修改, 可以看成n个点单点更新

所以暴力修改的复杂度$O(Cnlogn)$, $C$为总幸运数个数

总复杂度$O((n+m)logn+Cnlogn)$

 #include <iostream>
#include <algorithm>
#include <cstdio>
#define REP(i,a,n) for(int i=a;i<=n;++i)
#define mid ((l+r)>>1)
#define lc (o<<1)
#define rc (lc|1)
#define ls lc,l,mid
#define rs rc,mid+1,r
using namespace std; const int N = 4e5+, INF = 0x3f3f3f3f;
int n, m, ql, qr;
int a[N], s[N]; struct _ {
int mx, cnt, tag;
_ () {}
_ (int mx, int cnt) :mx(mx),cnt(cnt),tag() {}
_ operator + (const _ &rhs) const {
if (mx<rhs.mx) return _(rhs.mx,rhs.cnt);
if (mx>rhs.mx) return _(mx,cnt);
return _(mx,cnt+rhs.cnt);
}
void add(int k) {
mx+=k, tag+=k;
}
} v[N<<]; void dfs(int x) {
if (x>) return;
s[++*s]=x;
dfs(x*+),dfs(x*+);
} void build(int o, int l, int r) {
if (l==r) {
int t;
scanf("%d", &t);
int id = lower_bound(s+,s++*s,t)-s;
v[o]=_(t-s[id],);
a[l]=id;
return;
}
build(ls),build(rs);
v[o]=v[lc]+v[rc];
} void pd(int o) {
if (v[o].tag) {
v[lc].add(v[o].tag);
v[rc].add(v[o].tag);
v[o].tag=;
}
} void upd(int o, int l, int r) {
if (v[o].mx<=) return;
if (l==r) {
while (v[o].mx>) {
v[o].mx -= s[a[l]+]-s[a[l]];
++a[l];
}
return;
}
pd(o),upd(ls),upd(rs);
v[o]=v[lc]+v[rc];
} void add(int o, int l, int r, int k) {
if (ql<=l&&r<=qr) return v[o].add(k),upd(o,l,r);
pd(o);
if (mid>=ql) add(ls,k);
if (mid<qr) add(rs,k);
v[o]=v[lc]+v[rc];
} _ qry(int o, int l, int r) {
if (ql<=l&&r<=qr) return v[o];
pd(o);
if (mid<ql) return qry(rs);
if (mid>=qr) return qry(ls);
return qry(ls)+qry(rs);
} int main() {
dfs(),dfs();
sort(s+,s++*s),*s=unique(s+,s++*s)-s-;
s[++*s]=INF;
scanf("%d%d", &n, &m);
build(,,n);
REP(i,,m) {
int k;
char op[];
scanf("%s%d%d", op, &ql, &qr);
if (*op=='a') scanf("%d", &k), add(,,n,k);
else {
_ ret = qry(,,n);
printf("%d\n",ret.mx?:ret.cnt);
}
}
}

Lucky Array CodeForces - 121E (线段树,好题)的更多相关文章

  1. Lucky Array Codeforces - 121E && Bear and Bad Powers of 42 Codeforces - 679E

    http://codeforces.com/contest/121/problem/E 话说这题貌似暴力可A啊... 正解是想出来了,结果重构代码,调了不知道多久才A 错误记录: 1.线段树搞混num ...

  2. Please, another Queries on Array? CodeForces - 1114F (线段树,欧拉函数)

    这题刚开始看成求区间$\phi$和了........先说一下区间和的做法吧...... 就是说将题目的操作2改为求$(\sum\limits_{i=l}^{r}\phi(a[i]))\%P$ 首先要知 ...

  3. Codeforces Round #393 (Div. 2) (8VC Venture Cup 2017 - Final Round Div. 2 Edition) E - Nikita and stack 线段树好题

    http://codeforces.com/contest/760/problem/E 题目大意:现在对栈有m个操作,但是顺序是乱的,现在每输入一个操作要求你输出当前的栈顶, 注意,已有操作要按它们的 ...

  4. [AHOI 2009] 维护序列(线段树模板题)

    1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec  Memory Limit: 64 MB Description 老师交给小可可一个维护数列的任务,现在小 ...

  5. POJ 3468 线段树裸题

    这些天一直在看线段树,因为临近期末,所以看得断断续续,弄得有些知识点没能理解得很透切,但我也知道不能钻牛角尖,所以配合着刷题来加深理解. 然后,这是线段树裸题,而且是最简单的区间增加与查询,我参考了A ...

  6. hdu-1540线段树刷题

    title: hdu-1540线段树刷题 date: 2018-10-18 19:55:21 tags: acm 刷题 categories: ACM-线段树 概述 哇,,,这道线段树的题可以说是到目 ...

  7. hdu-5023线段树刷题

    title: hdu-5023线段树刷题 date: 2018-10-18 13:32:13 tags: acm 刷题 categories: ACM-线段树 概述 这道题和上次做的那道染色问题一样, ...

  8. poj-2777线段树刷题

    title: poj-2777线段树刷题 date: 2018-10-16 20:01:07 tags: acm 刷题 categories: ACM-线段树 概述 这道题是一道线段树的染色问题,,, ...

  9. zoj-1610线段树刷题

    title: zoj-1610线段树刷题 date: 2018-10-16 16:49:47 tags: acm 刷题 categories: ACM-线段树 概述 这道题是一道简单的线段树区间染色问 ...

随机推荐

  1. Java设计模式应用——适配器模式

    性能监控系统中,存在告警模块和报表模块,告警结果和报表结果都需要导出. 由于告警开发进度较快,已经实现了excel导出.csv导出.zip导出功能,现在报表需要excel导出.csv导出.pdf导出功 ...

  2. 生成word附件和word域动态赋值

    生成word文档和word域动态赋值,很多时候需要生成这样的word文档供下载和打印,先制作一个包含了域的 word的模板附件,放在服务器端或者字节流存入数据库,以供需要的时候代码可以获取到,如: 其 ...

  3. Open-Falcon

    A Distributed and High-Performance Monitoring System Scalability Scalable monitoring system is neces ...

  4. js 操作数字类型

    1.内置函数 Number().parseInt().parseFloat() var num = "88.88abc888"; Number(num);              ...

  5. 首屏渲染时间获取 performance.now()

    Performance — 前端性能监控利器   最近在写一个监控脚本,终于有机会接触到了这一块,整理后写下了本文.Performance是一个做前端性能监控离不开的API,最好在页面完全加载完成之后 ...

  6. 02: MySQL的安装与基本配置

    MySQL其他篇 目录: 参考网站 1.1 MySQL安装与基本配置(centos 7.3) 1.2 修改MySQL默认字符集和引擎 1.3 MySQL创建用户与授权 1.1 MySQL安装与基本配置 ...

  7. 20145304 Exp9 Web安全基础实践

    20145304 Exp9 Web安全基础实践 实验后回答问题 (1)SQL注入攻击原理,如何防御 SQL注入是将查询语句当做查询内容输入到查询的框中,以此来使服务器执行攻击者想让它执行的语句,而不是 ...

  8. UVa 1451 Average - 斜率优化

    A DNA sequence consists of four letters, A, C, G, and T. The GC-ratio of a DNA sequence is the numbe ...

  9. noip 2013 提高组 Day2 部分题解

    积木大赛: 之前没有仔细地想,然后就直接暴力一点(骗点分),去扫每一高度,连到一起的个数,于是2组超时 先把暴力程序贴上来(可以当对拍机) #include<iostream> #incl ...

  10. SpringCloud请求响应数据转换(二)

    上篇文章记录了从后端接口返回数据经过切面和消息转换器处理后返回给前端的过程.接下来,记录从请求发出后到后端接口调用过的过程. web请求处理流程 源码分析 ApplicationFilterChain ...