[2019长沙长郡中学集训]加法
题面描述
给定一个\(n\)阶排列\(b\),要求维护一个初值全为\(0\)的数组\(\{a_i\}\),支持\(q\)次如下操作:
- 给出\(l,r\),将\(a_l,a_{l+1},......,a_{r-1},a_r\),全部+1
给出\(l,r\),查询\(\sum_{i=l}^{r} \lfloor \frac{{b[i]}}{a[i]} \rfloor\)
输入格式
第一行输入两个整数\(n,q\)
第二行\(n\)个正整数表示排列\(b\)。
接下来\(q\)行,每行三个正整数\(op,l,r,op=1\)表示第一种操作,\(op=2\)表示第二种操作输出格式
对于每次询问,输出一行一个非负整数表示答案。
数据规模
对于$%30 $的数据,\(1\leq n,q \leq 3000.\)
对于另外\(\%30\)的数据,当\(op=2\)时,有\(l=1,r=n\)
对于\(\%100\)的数据,\(1\leq n,q \leq 3\times 10^5,op\in\{1,2\},1\leq l \leq r \leq n.\)样例输入
5 10
1 5 2 4 3
1 1 4
2 1 4
1 2 5
1 3 5
2 1 5
1 2 4
2 1 4
1 2 5
1 2 2
2 1 5样例输出
1
2
4
6题解
考试的时候爆掉了。。。卡常是真的恶心QAQ
先考虑部分分的做法
对于3000以内的数据,我们直接暴力循环。比较闲的同学可以考虑写两个线段树,一个用来更新a数组的值,另一个用来维护a[i]/b[i]。
对于查询操作恒查询整个区间的数据,我们可以只维护一个线段树,用于维护a数组,并区间查询整个区间的ans即可。
---------------------------以下是正解部分-----------------------------
观察原式可以发现,我们最后的取值要向下取整,则每一个位置\(i\)产生更多贡献的唯一办法就是使a[i]成为b[i]的k倍(k>0)。因此,我们用一个线段树记录b[i]的值,用数组记录b的原值,同时用另一棵线段树维护答案,每次op=1时使区间内的每一个b[i]全部-1。当b[i]=0时我们使当前位的贡献+1,并重置b[i]的值为初始值。每次单独变换的复杂度为\(O(\log n)\),每次查询时递归进第二棵线段树中查找,因此总的复杂度是\(O(q \log^2n)\)
为什么要用减法而不是加法呢?
如果用加法运算我们需要同时维护maxa和minb的值,而如果用减法只用维护一个min就好了
#include<bits/stdc++.h>
#define il inline
#define re register
typedef long long ll;
using namespace std;
const int maxn = 3e5 + 10;
int n, q, ans;
int b[maxn];
int trmin[maxn<<2], tradd[maxn<<2], lazy[maxn<<2];
//
il void init() {memset(lazy, 0, sizeof(lazy));memset(trmin, 0, sizeof(trmin));memset(tradd, 0, sizeof(tradd));
}
//
il void pushup(int id) {trmin[id] = min(trmin[id<<1], trmin[id<<1|1]);tradd[id] = tradd[id<<1] + tradd[id<<1|1];return ;
}
//
il void build(int id, int l, int r) {if(l == r) {trmin[id] = b[l];return;}int mid = (l+r)>>1;build(id<<1, l, mid);build(id<<1|1, mid+1, r);pushup(id);
}
il void pushdown(int id) {if (lazy[id]) {lazy[id << 1] += lazy[id];lazy[id << 1 | 1] += lazy[id];trmin[id << 1] -= lazy[id];trmin[id << 1 | 1] -= lazy[id];lazy[id] = 0;}
}
il void update(int id, int l, int r, int x, int y) {if(trmin[id] > 1 && x <= l && r <= y) {lazy[id]++;trmin[id]--;return ;}if(trmin[id] == 1 && l == r) {tradd[id]++;trmin[id] = b[l];lazy[id] = 0;return ;}pushdown(id);int mid = (l + r) >> 1;if (x <= mid)update(id << 1, l, mid, x, y);if (y > mid)update(id << 1 | 1, mid + 1, r, x, y);pushup(id);
}
il int query(int id, int l, int r, int x, int y) {if(x <= l && r <= y) return tradd[id];if(trmin[id] == 0) update(1, 1, n, x, y);pushdown(id);int sum = 0;int mid = (l+r) >> 1;if(x <= mid) sum += query(id<<1, l, mid, x, y);if(y > mid) sum += query(id<<1|1, mid+1, r, x, y);pushup(id);return sum;
}
signed main(){init();scanf("%d%d", &n, &q);for(re int i = 1; i <= n; ++i) scanf("%d", &b[i]);build(1, 1, n);int op, l, r;while(q--) {scanf("%d%d%d", &op, &l, &r);if(op == 1)update(1, 1, n, l, r);elseprintf("%d\n", query(1, 1, n, l, r));}return 0;
}
转载于:https://www.cnblogs.com/Chen574118090/p/11563154.html
[2019长沙长郡中学集训]加法相关推荐
- 2021高考长郡中学成绩单查询,2021年长沙各高中高考成绩排名及放榜最新消息
一.2020年长沙各高中高考成绩排名及放榜最新消息 长沙一中(600分上线率全省第一,一本上线率稳定增长) 在2020年的高考中,长沙一中理科最高分为696分,因全省各方面的高考信息都需要进一步的核实 ...
- 湖南高中计算机专业考生,湖南18人被保送清华,分别来自6所重点高中,长郡中学升学率最高...
今年共有371人被清华和北大保送 北京大学和清华大学作为国内最知名的两所学校,相信不少拔尖的考生都梦想着能考进这两所名校之一,里面凝聚了来自五湖四海的学霸,教师资源一流,学习环境和氛围都非常优越,每年 ...
- 湖南长沙湖南长沙长郡中学长郡中学——循环简单普及题开业了开业了!
循环专题练习 1.给出一个正整数,求它是几位数,并从个位开始分别打印出各位上的数字.2.编写程序,判断任一大于2的整数是质数还是合数.3.编写程序输入一系列整数,用0作结束标志,统计其中有多少个整数, ...
- 2021长郡浏阳中学高考成绩查询,2021长沙市高中排名一览表
2021长沙市高中排名一览表2021-04-15 15:43:40文/董玉莹 高中对于学生的学习是影响很大的,好的高中能提供学生好的学习环境.本文整理了长沙高中排名,来看看长沙都有哪些重点高中. 长沙 ...
- 学子随感——遇见长郡浏阳(2)
学子随感 4 via G1705龚星羽 星期一,多云.最高气温37℃,东风一级.上午十点,当长郡浏阳的同学热情地一把接过我手中沉重的行李时,我还在痴痴地望着长郡浏阳宏伟的大楼,默默在心里感叹:&quo ...
- 2019长沙理工大学计算机专业分数线,2019长沙理工大学各省各批次录取分数线汇总...
2017年长沙各高中高考喜报汇总(持续更新) 2017年高考,湖南长沙各个高中考试情况如何呢?2017年长沙各高中高考喜报汇总见下文. 2017年湖南高考状元(文理) 2017年湖南高考状元是谁?20 ...
- 学子随感——遇见长郡浏阳(1)
学子随感 1 via G1705吴佳睿 七月中旬的长沙,早晨便已热浪翻涌.烈日下的动员仪式,更因着这暖阳而激情澎湃.从学姐学长的满满回忆中,我们早已预知这场不一样的旅程即将为我们带来快乐与艰辛.当坐上 ...
- 学子随感——遇见长郡浏阳(3)
学子随感 8 via G1719郭霖茜 今天是我们走进新农村的第一天,带着美好的期待和向往,开启了我们"向往的生活".正如<平凡的世界>一书中说,只有永不遏制的奋斗,才 ...
- 西乡中学2021艺体生高考成绩查询,2019年西乡中学特长生评分标准
2019年西乡中学特长生评分标准 田径项目考核内容及评分标准 (一)男子 田径专项技能分值对照表,涵盖:100米.200米.400米.800米.1500米.3000米.110米栏.跳高.跳远.三级跳远 ...
最新文章
- python下载mp4
- 改变linux终端颜色
- 跨Hadoop平台Hive表export和import迁移
- mysql pdo 查询一条数据,使用 PDO 关联查询 MySQL 数据
- 使用逻辑回归制作评分卡
- mxf转换工具(Aiseesoft MXF Converter) v9.2.36
- 思科交换机配置命令大全
- 手游服务器微信互通,使命召唤手游QQ和微信可以一起玩吗
- APP运营推广:新APP建设之后该怎么做好品牌运营?
- 导入Android 项目,按钮点击事件,添加okhttp三合一,android动态修改标题
- Lua基础入门—— 写出自己的魔兽世界插件
- 内存管理中的 RSS 和 VSZ意思
- 数据库MySQL备份命令,手动备份MySQL数据库
- Ansible剧本使用
- mysql中varchar与oracle中varchar2区别
- 简要分析git作用及应公司业务要求分析,什么是响应式和虚拟dom面试题
- Kindle 转换器
- 天呐!Linus两周搞出个Git,快来看看咋用滴!
- 第一次工业革命(二)——蒸汽机与工厂的出现
- linux运维管理之监控,Linux系统运维之运维监控.pdf