第一道Ynoi,纪念一下。

众所周知,Ynoi会进行惨无人道的卡常操作,所以我们可以使用暴力去做Ynoi。

于是乎,我们考虑分块+暴力。

对于操作2,不难发现是道裸的分块,可以抄P3372的代码。

对于操作1,我们秉持暴力的思想,直接暴力修改。

然后就AC了。

但是如果每个操作都是1 1 1 1,那么最坏复杂度是 \(O(n^2)\) ...

可是毕竟数据不是lxl造的,随便暴力。

卡常都不用卡。

复杂度什么的全部不管。

好像线段树和树状数组被卡掉了?

分块能过就行。

最后贴一下分块的代码。

#include<stdio.h>
#include<math.h>
#define reg register
#define ri reg int
#define rep(i, x, y) for(ri i = x; i <= y; ++i)
#define nrep(i, x, y) for(ri i = x; i >= y; --i)
#define DEBUG 1
#define ll long long
#define il inline
#define max(i, j) (i) > (j) ? (i) : (j)
#define min(i, j) (i) < (j) ? (i) : (j)
#define read(i) io.READ(i)
#define print(i) io.WRITE(i)
#define push(i) io.PUSH(i)
struct IO {
#define MAXSIZE (1 << 20)
#define isdigit(x) (x >= '0' && x <= '9')
char buf[MAXSIZE], *p1, *p2;
char pbuf[MAXSIZE], *pp;
#if DEBUG
#else
IO() : p1(buf), p2(buf), pp(pbuf) {}
~IO() {
fwrite(pbuf, 1, pp - pbuf, stdout);
}
#endif
inline char gc() {
#if DEBUG
return getchar();
#endif
if(p1 == p2)
p2 = (p1 = buf) + fread(buf, 1, MAXSIZE, stdin);
return p1 == p2 ? ' ' : *p1++;
}
inline bool blank(char ch) {
return ch == ' ' || ch == '\n' || ch == '\r' || ch == '\t';
}
template <class T>
inline void READ(T &x) {
register double tmp = 1;
register bool sign = 0;
x = 0;
register char ch = gc();
for(; !isdigit(ch); ch = gc())
if(ch == '-') sign = 1;
for(; isdigit(ch); ch = gc())
x = x * 10 + (ch - '0');
if(ch == '.')
for(ch = gc(); isdigit(ch); ch = gc())
tmp /= 10.0, x += tmp * (ch - '0');
if(sign) x = -x;
}
inline void READ(char *s) {
register char ch = gc();
for(; blank(ch); ch = gc());
for(; !blank(ch); ch = gc())
*s++ = ch;
*s = 0;
}
inline void READ(char &c) {
for(c = gc(); blank(c); c = gc());
}
inline void PUSH(const char &c) {
#if DEBUG
putchar(c);
#else
if(pp - pbuf == MAXSIZE) {
fwrite(pbuf, 1, MAXSIZE, stdout);
pp = pbuf;
}
*pp++ = c;
#endif
}
template <class T>
inline void WRITE(T x) {
if(x < 0) {
x = -x;
PUSH('-');
}
static T sta[35];
T top = 0;
do {
sta[top++] = x % 10;
x /= 10;
} while(x);
while(top)
PUSH(sta[--top] + '0');
}
template <class T>
inline void WRITE(T x, char lastChar) {
WRITE(x);
PUSH(lastChar);
}
} io; ll n, m, a[200010], belong[200010];
ll s, c, st[50010], ed[50010];
ll sum[50010];
void pretreat() {
s = (int)sqrt(n);
for(ri i = 1; i <= n; i += s) {
st[++c] = i;
ed[c] = min(i + s - 1, n);
} /*做出每个块的左右端点*/
rep(i, 1, c) rep(j, st[i], ed[i]) {
belong[j] = i;
sum[i] += a[j]; /*预处理块内各数之和*/
}
/*记录每一个数在哪一块*/
}
il void single_upd(ll x, ll k) {
a[x] += k; /*单点增加*/
sum[belong[x]] += k;
}
il void range_upd(ll x, ll y, ll k) {
for(ll i = y; i <= n; i += x) single_upd(i, k);
}
il ll range_query(ll x, ll y) {
ll l = belong[x], r = belong[y], ans = 0;
if(l == r) {
rep(i, x, y) ans += a[i];
return ans % (int)(1e9 + 7);
}
rep(i, x, ed[l]) ans += a[i];
/*左边不完整块的求和*/
rep(i, st[r], y) ans += a[i];
rep(i, l + 1, r - 1) ans += sum[i];
return ans % (int)(1e9 + 7);
}
int main() {
read(n), read(m);
rep(i, 1, n) read(a[i]);
pretreat();
rep(i, 1, m) {
ri opt, l, r, c;
read(opt), read(l), read(r);
if(opt == 1) read(c), range_upd(l, r, c);
else print(range_query(l, r)), push('\n');
}
return 0;
}

最新文章

  1. 常用的Jquery插件
  2. 【hihoCoder】1036 Trie图
  3. android SDK 更新问题完美解决 http://dl-ssl.google.com refused
  4. C2第三次作业解题报告
  5. ASP.NET服务器控件使用之Reportviewer 报表
  6. UVAoj 11324 - The Largest Clique(tarjan + dp)
  7. 关于linux服务器的批量维护、批量升级、
  8. clone函数
  9. [Javascript] Linting JavaScript with ESLint
  10. UITapGestureRecognizer会屏蔽掉Button的点击事件( 转载)
  11. UESTC_Ferris Wheel String 2015 UESTC Training for Search Algorithm &amp; String&lt;Problem L&gt;
  12. 下拉菜单中的Option对象
  13. asp.net学习之SqlDataSource
  14. vue.js2.0新手笔记(一)——安装
  15. CentOS 7.0 启动多个MySQL实例(mysql-5.7.21)
  16. Do a web framework ourselves
  17. 小程序实践(二):swiper组件实现轮播图效果
  18. C/C++经典面试题一
  19. mysql 递归查找菜单节点的所有子节点
  20. word打不开怎么办?

热门文章

  1. golang中的defer和return的执行顺序
  2. Redis在linux系统中的优化
  3. 安装VMwareTools
  4. Murmur3 Hash 128位java和C#方法
  5. Raspberry Pi:树莓派开发板配置USB启动系统
  6. Docker:redis容器使用redis.conf启动失败,不报错
  7. Springboot:单元测试日志打印@Slf4j 注解的使用方法
  8. B站挂了之后出现的tengine是个啥?
  9. 从新建文件夹开始构建ShadowPlay Engine游戏引擎(3)
  10. 使用BeautifulSoup自动爬取微信公众号图片