题目链接

题目大意:

定义只含数字$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. python pip list 命令列出所有安装包和版本信息

    c:\Python27\Scripts>pip listDEPRECATION: The default format will switch to columns in the future. ...

  2. mysql5.6升级及mysql无密码登录

    mysql5.6升级 mysql5.6的升级可以分为以下几个步骤: 安全关闭正在运行的MySQL实例 把/usr/local/mysql 的连接由MySQL5.6更改为MySQL5.7 启动MySQL ...

  3. gcc5.2版本安装详解

    gcc5.2版本安装详解 1.下载gcc-5.2安装包 gcc各版本浏览地址:http://ftp.gnu.org/gnu/gcc/gcc-5.2浏览地址:http://ftp.gnu.org/gnu ...

  4. 20145332卢鑫 MSF基础应用

    20145332卢鑫 MSF基础应用 实验过程 靶机的IP地址:192.168.10.160 Kali的IP地址:192.168.10.128 1.一个主动攻击 攻击XP系统的漏洞:ms08_067 ...

  5. 高斯日记|2013年蓝桥杯B组题解析第一题-fishers

    高斯日记 大数学家高斯有个好习惯:无论如何都要记日记. 他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210 后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几 ...

  6. HDU 1285 确定比赛名次(拓扑排序)题解

    Problem Description 有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委 ...

  7. mysql时间格式化函数日期格式h和H区别

    本文为博主原创,未经允许不得转载: 今天碰到一个问题,发现项目中有一个统计图的数据和时间格式没有对应准确,统计图要描述的是操作次数和操作时间的关系, 但很奇怪的是操作次数对应的时间却是凌晨,实际应用中 ...

  8. 【TCP/IP详解 卷一:协议】第二十四章 TCP的未来与性能

    来到了TCP的最后一个章节,未来与性能.在当时(1991年)的未来,如今已经部分变为现实,部分就只是历史中的实验. 主要内容: 路径MTU的发现与TCP的结合. 长肥管道 和 高速千兆比网络. 窗口扩 ...

  9. POJ 2117 Electricity(割点求连通分量)

    http://poj.org/problem?id=2117 题意:求删除图中任意一个顶点后的最大连通分量数. 思路: 求出每个割点对应的连通分量数,注意这道题目中图可能是不连通的. 这道题目我wa了 ...

  10. spring +servlet 与 spring MVC

    spring serlvetSpring框架中context-param与servlet中init-param的contextConfigLocation的区别https://blog.csdn.ne ...