博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Poj3468 A Simple Problem with Integers (分块)
阅读量:4931 次
发布时间: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

你可能感兴趣的文章
网站开发技能图谱
查看>>
4.27随笔
查看>>
CSS实例:图片导航块
查看>>
poj1860 Currency Exchange(spfa判断正环)
查看>>
SQL CHECK 约束&Case when 的使用方法
查看>>
[整理]HTTPS和SSL证书
查看>>
[转载] Android 异步加载图片,使用LruCache和SD卡或手机缓存,效果非常的流畅
查看>>
UVA12206 Stammering Aliens 【SAM 或 二分 + hash】
查看>>
水晶苍蝇拍:聊聊估值那些事儿——“指标”背后的故事 (2011-11-01 14:58:32)
查看>>
3.每周总结
查看>>
应用提交 App Store 上架被拒绝
查看>>
Android实现异步处理 -- HTTP请求
查看>>
数据清空js清空div里的数据问题
查看>>
Fortran中的指针使用
查看>>
移动终端app测试点总结
查看>>
14-6-27&28自学内容小结
查看>>
JSP
查看>>
---
查看>>
(第一组_GNS3)自反ACl
查看>>
hdu--1258--Sum It Up(Map水过)
查看>>