[Luogu] 计数
https://www.luogu.org/problemnew/show/P3130
#include <cstdio>
#include <iostream> using namespace std;
const int N = 2e5 + ; #define LL long long LL W[N << ], Min[N << ], Size[N << ], F[N << ];
int n, T;
LL Answer; #define gc getchar()
#define oo 999999999 inline int read() {
int x = ; char c = gc;
while(c < '' || c > '') c = gc;
while(c >= '' && c <= '') x = x * + c - '', c = gc;
return x;
} #define lson jd << 1
#define rson jd << 1 | 1 void Up(int jd) {
W[jd] = W[lson] + W[rson];
Min[jd] = min(Min[lson], Min[rson]);
return ;
} void Build_tree(int l, int r, int jd) {
Size[jd] = (r - l + );
if(l == r) {W[jd] = read(); Min[jd] = W[jd]; return ;}
int mid = (l + r) >> ;
Build_tree(l, mid, lson);
Build_tree(mid + , r, rson);
Up(jd);
} void Down(int jd) {
int imp = F[jd];
F[lson] += imp; F[rson] += imp;
W[lson] += imp * Size[lson]; W[rson] += imp * Size[rson];
Min[lson] += imp; Min[rson] += imp;
F[jd] = ;
return ;
} void Sec_A_min(int l, int r, int jd, int x, int y) {
if(x <= l && r <= y) {Answer = min(Answer, Min[jd]); return ;}
if(F[jd]) Down(jd);
int mid = (l + r) >> ;
if(x <= mid) Sec_A_min(l, mid, lson, x, y);
if(y > mid) Sec_A_min(mid + , r, rson, x, y);
} void Sec_A_sum(int l, int r, int jd, int x, int y) {
if(x <= l && r <= y) {Answer += W[jd]; return ;}
if(F[jd]) Down(jd);
int mid = (l + r) >> ;
if(x <= mid) Sec_A_sum(l, mid, lson, x, y);
if(y > mid) Sec_A_sum(mid + , r, rson, x, y);
} void Sec_G(int l, int r, int jd, int x, int y, int g) {
if(x <= l && r <= y) {W[jd] += g * Size[jd]; Min[jd] += g; F[jd] += g; return ;}
if(F[jd]) Down(jd);
int mid = (l + r) >> ;
if(x <= mid) Sec_G(l, mid, lson, x, y, g);
if(y > mid) Sec_G(mid + , r, rson, x, y, g);
Up(jd);
} int main() {
n = read(); T = read();
Build_tree(, n, );
while(T --) {
string s; cin >> s;
if(s[] == 'M') {Answer = oo; int x = read(), y = read(); Sec_A_min(, n, , x, y); cout << Answer << "\n";}
else if(s[] == 'S') {Answer = ; int x = read(), y = read(); Sec_A_sum(, n, , x, y); cout << Answer << "\n";}
else {int x = read(), y = read(), g = read(); Sec_G(, n, , x, y, g);}
}
return ;
}
[Luogu] 计数的更多相关文章
- Luogu P5296 [北京省选集训2019]生成树计数
Luogu P5296 [北京省选集训2019]生成树计数 题目链接 题目大意:给定每条边的边权.一颗生成树的权值为边权和的\(k\)次方.求出所有生成树的权值和. 我们列出答案的式子: 设\(E\) ...
- Luogu 1351 NOIP 2014 联合权值(贪心,计数原理)
Luogu 1351 NOIP 2014 联合权值(贪心,计数原理) Description 无向连通图 G 有 n 个点,n-1 条边.点从 1 到 n 依次编号,编号为 i 的点的权值为 Wi, ...
- luogu 1608 路径统计--最短路计数
https://www.luogu.org/problemnew/show/P1608 题意https://www.cnblogs.com/rmy020718/p/9440588.html相似,建议还 ...
- BZOJ 2281 Luogu P2490 [SDOI2011]黑白棋 (博弈论、DP计数)
怎么SDOI2011和SDOI2019的两道题这么像啊..(虽然并不完全一样) 题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?i ...
- Luogu P2807 三角形计数
题目背景 三角形计数(triangle) 递推 题目描述 把大三角形的每条边n等分,将对应的等分点连接起来(连接线分别平行于三条边),这样一共会有多少三角形呢?编程来解决这个问题. 输入输出格式 输入 ...
- luogu【P1144】最短路计数
原题入口 这道题 一道有关于最短路的图论问题. 要求从1开始求解最短路的条数. 这个题十分有趣,首先,跑裸的spfa(或者dijkstra)算出从1开始的最短路的长度. 再其次,计数的话,可以用记忆化 ...
- 线段树合并 || 树状数组 || 离散化 || BZOJ 4756: [Usaco2017 Jan]Promotion Counting || Luogu P3605 [USACO17JAN]Promotion Counting晋升者计数
题面:P3605 [USACO17JAN]Promotion Counting晋升者计数 题解:这是一道万能题,树状数组 || 主席树 || 线段树合并 || 莫队套分块 || 线段树 都可以写..记 ...
- 题解 luogu P1144 【最短路计数】
本蒟蒻也来发一次题解第一篇请见谅 这个题有几个要点 1.无向无权图,建图的时候别忘记建来回的有向边[因此WA掉1次 2.无权嘛,那么边长建成1就好了2333333 3.最短路采用迪杰斯特拉(别忘用堆优 ...
- luogu P3605 [USACO17JAN]Promotion Counting晋升者计数
题目链接 luogu 思路 可以说是线段树合并的练手题目吧 也没啥说的,就是dfs,然后合并... 看代码吧 错误 和写主席树错的差不多 都是变量写错.... 代码 #include <bits ...
随机推荐
- hyper-v虚拟机centos7网络配置
原文地址:https://jingyan.baidu.com/article/91f5db1b0279bd1c7e05e377.html hyper-v安装了centos7之后并不能上网,这里简单介绍 ...
- [转载]Java序列化与反序列化
[转载]Java序列化与反序列化 来源: https://www.cnblogs.com/anitinaj/p/9253921.html 序列化和反序列化作为Java里一个较为基础的知识点,那你能说一 ...
- JavaScript02
一. 判断// 三元表达式// 循环// 判断: 用的最多的就是if判断// 1.// if(条件){// 当条件满足以后执行的语句// } // 2.// if(条件){// // }else{// ...
- 浅谈Promise原理与应用
在JavaScript中,所有代码都是单线程.由于该“缺陷”,JavaScript在处理网络操作.事件操作时都是需要进行异步执行的.AJAX就是一个典型的异步操作 对于异步操作,有传统的利用回调函数和 ...
- 查看PHP指定扩展的版本信息
命令:php --ri 扩展名
- 用最简单的代码写出banner图轮播效果
以下视频是由[赵一鸣随笔]博客提供的“用最简单的代码写出banner图轮播效果”. 查看全屏高清视频,请点击链接:http://www.zymseo.com/58.html
- sed原理及sed命令格式 ,缓存区,模式空间
4.1 Sed工作原理 sed是一个非交互式的流编辑器.所谓非交互式,是指使用sed只能在命令行下输入编辑命令来编辑文本,然后在屏幕上查看输出:而所谓流编辑器,是指sed每次只从 ...
- Centos7.4安装RabbitMQ
1.1 安装RabbitMQ 1.1.1 系统环境 [root@rabbitmq ~]# cat /etc/redhat-release CentOS Linux release 7.4.1708 ( ...
- 反编译DLL并修改DLL中的内容
使用场景:针对当前用户因不愿意进行软件版本升级,但又希望可以解决当前问题,此时可以考虑通过反编辑DLL进行修改内容,然后重新生成新的DLL 操作步骤: 1.首先使用ILSpy.exe反编译DLL,查看 ...
- CentOS7 解决不能切换中英文输入法的问题
1. 运行 im-chooser(如果没有要先安装) $ im-chooser 2. 在打开的窗口选择 iBus,然后 Logout 再 Login, 输入法即可切换.