博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Poj3468 A Simple Problem with Integers (分块)
阅读量:4933 次
发布时间:2019-06-11

本文共 1905 字,大约阅读时间需要 6 分钟。

题面

题解

区间求和\(+\)区间修改板子,这里用分块写的

#include 
#include
#include
#include
using std::min; using std::max;using std::swap; using std::sort;typedef long long ll;#define int llconst int N = 1e5 + 10 , SN = 340;int n, siz, q, bel[N], val[N];int sum[SN], add[SN], L[SN], R[SN];template
void read(T &x) { int flag = 1; x = 0; char ch = getchar(); while(ch < '0' || ch > '9') { if(ch == '-') flag = -flag; ch = getchar(); } while(ch >= '0' && ch <= '9') x = x * 10 + ch - '0', ch = getchar(); x *= flag;}void modify (int l, int r, int c) { int fl = bel[l], fr = bel[r]; if(fl == fr) { for(int i = l; i <= r; ++i) val[i] += c, sum[fl] += c; } else { for(int i = l; i <= R[fl]; ++i) val[i] += c, sum[fl] += c; for(int i = fl + 1; i < fr; ++i) add[i] += c; for(int i = L[fr]; i <= r; ++i) val[i] += c, sum[fr] += c; }}int query(int l, int r) { int fl = bel[l], fr = bel[r], ret = 0; if(fl == fr) { for(int i = l; i <= r; ++i) ret += val[i] + add[fl]; } else { for(int i = l; i <= R[fl]; ++i) ret += val[i] + add[fl]; for(int i = fl + 1; i < fr; ++i) ret += sum[i] + add[i] * (R[i] - L[i] + 1); for(int i = L[fr]; i <= r; ++i) ret += val[i] + add[fr]; } return ret;}signed main () { read(n), read(q), siz = sqrt(n); for(int i = 1; i <= n; ++i) read(val[i]), bel[i] = (i - 1) / siz + 1, sum[bel[i]] += val[i]; for(int i = 1; i <= bel[n]; ++i) L[i] = R[i - 1] + 1, R[i] = i * siz; R[bel[n]] = n; int l, r, k; while(q--) { char opt; scanf("\n%c", &opt); read(l), read(r); if(opt == 'Q') printf("%lld\n", query(l, r)); else read(k), modify(l, r, k); } return 0;}

转载于:https://www.cnblogs.com/water-mi/p/10303502.html

你可能感兴趣的文章
Win8的重点不在PC:触屏+语音+体感+云
查看>>
arm linux 启动过程
查看>>
win7重置密码的方法
查看>>
WinForm界面开发之“分页控件”
查看>>
Zen Coding — a new way of writing HTML and CSS code
查看>>
向Sql Server中导入TXT文本文档
查看>>
LINUX SOCKET PART 2: THE SERVER SIDE ISSUES
查看>>
基本数据结构(C)
查看>>
"西厂"、"东厂"照片
查看>>
淘米水的10大功效
查看>>
推式,拉式,工序拉式,装配拉式
查看>>
关于“引用”
查看>>
WPF 分批加载十万个按钮
查看>>
Linux的rsh配置rhost
查看>>
POJ-1416 Shredding Company 枚举
查看>>
SharePoint2010网站备份还原简单介绍
查看>>
PL/SQL集合与记录
查看>>
第十九章 11图书 药品管理系统
查看>>
类型转换
查看>>
C++回调机制实现(转)
查看>>