第一道Ynoi,纪念一下。

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

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

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

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

然后就AC了。

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

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

卡常都不用卡。

复杂度什么的全部不管。

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

分块能过就行。

最后贴一下分块的代码。

  1. #include<stdio.h>
  2. #include<math.h>
  3. #define reg register
  4. #define ri reg int
  5. #define rep(i, x, y) for(ri i = x; i <= y; ++i)
  6. #define nrep(i, x, y) for(ri i = x; i >= y; --i)
  7. #define DEBUG 1
  8. #define ll long long
  9. #define il inline
  10. #define max(i, j) (i) > (j) ? (i) : (j)
  11. #define min(i, j) (i) < (j) ? (i) : (j)
  12. #define read(i) io.READ(i)
  13. #define print(i) io.WRITE(i)
  14. #define push(i) io.PUSH(i)
  15. struct IO {
  16. #define MAXSIZE (1 << 20)
  17. #define isdigit(x) (x >= '0' && x <= '9')
  18. char buf[MAXSIZE], *p1, *p2;
  19. char pbuf[MAXSIZE], *pp;
  20. #if DEBUG
  21. #else
  22. IO() : p1(buf), p2(buf), pp(pbuf) {}
  23. ~IO() {
  24. fwrite(pbuf, 1, pp - pbuf, stdout);
  25. }
  26. #endif
  27. inline char gc() {
  28. #if DEBUG
  29. return getchar();
  30. #endif
  31. if(p1 == p2)
  32. p2 = (p1 = buf) + fread(buf, 1, MAXSIZE, stdin);
  33. return p1 == p2 ? ' ' : *p1++;
  34. }
  35. inline bool blank(char ch) {
  36. return ch == ' ' || ch == '\n' || ch == '\r' || ch == '\t';
  37. }
  38. template <class T>
  39. inline void READ(T &x) {
  40. register double tmp = 1;
  41. register bool sign = 0;
  42. x = 0;
  43. register char ch = gc();
  44. for(; !isdigit(ch); ch = gc())
  45. if(ch == '-') sign = 1;
  46. for(; isdigit(ch); ch = gc())
  47. x = x * 10 + (ch - '0');
  48. if(ch == '.')
  49. for(ch = gc(); isdigit(ch); ch = gc())
  50. tmp /= 10.0, x += tmp * (ch - '0');
  51. if(sign) x = -x;
  52. }
  53. inline void READ(char *s) {
  54. register char ch = gc();
  55. for(; blank(ch); ch = gc());
  56. for(; !blank(ch); ch = gc())
  57. *s++ = ch;
  58. *s = 0;
  59. }
  60. inline void READ(char &c) {
  61. for(c = gc(); blank(c); c = gc());
  62. }
  63. inline void PUSH(const char &c) {
  64. #if DEBUG
  65. putchar(c);
  66. #else
  67. if(pp - pbuf == MAXSIZE) {
  68. fwrite(pbuf, 1, MAXSIZE, stdout);
  69. pp = pbuf;
  70. }
  71. *pp++ = c;
  72. #endif
  73. }
  74. template <class T>
  75. inline void WRITE(T x) {
  76. if(x < 0) {
  77. x = -x;
  78. PUSH('-');
  79. }
  80. static T sta[35];
  81. T top = 0;
  82. do {
  83. sta[top++] = x % 10;
  84. x /= 10;
  85. } while(x);
  86. while(top)
  87. PUSH(sta[--top] + '0');
  88. }
  89. template <class T>
  90. inline void WRITE(T x, char lastChar) {
  91. WRITE(x);
  92. PUSH(lastChar);
  93. }
  94. } io;
  95. ll n, m, a[200010], belong[200010];
  96. ll s, c, st[50010], ed[50010];
  97. ll sum[50010];
  98. void pretreat() {
  99. s = (int)sqrt(n);
  100. for(ri i = 1; i <= n; i += s) {
  101. st[++c] = i;
  102. ed[c] = min(i + s - 1, n);
  103. } /*做出每个块的左右端点*/
  104. rep(i, 1, c) rep(j, st[i], ed[i]) {
  105. belong[j] = i;
  106. sum[i] += a[j]; /*预处理块内各数之和*/
  107. }
  108. /*记录每一个数在哪一块*/
  109. }
  110. il void single_upd(ll x, ll k) {
  111. a[x] += k; /*单点增加*/
  112. sum[belong[x]] += k;
  113. }
  114. il void range_upd(ll x, ll y, ll k) {
  115. for(ll i = y; i <= n; i += x) single_upd(i, k);
  116. }
  117. il ll range_query(ll x, ll y) {
  118. ll l = belong[x], r = belong[y], ans = 0;
  119. if(l == r) {
  120. rep(i, x, y) ans += a[i];
  121. return ans % (int)(1e9 + 7);
  122. }
  123. rep(i, x, ed[l]) ans += a[i];
  124. /*左边不完整块的求和*/
  125. rep(i, st[r], y) ans += a[i];
  126. rep(i, l + 1, r - 1) ans += sum[i];
  127. return ans % (int)(1e9 + 7);
  128. }
  129. int main() {
  130. read(n), read(m);
  131. rep(i, 1, n) read(a[i]);
  132. pretreat();
  133. rep(i, 1, m) {
  134. ri opt, l, r, c;
  135. read(opt), read(l), read(r);
  136. if(opt == 1) read(c), range_upd(l, r, c);
  137. else print(range_query(l, r)), push('\n');
  138. }
  139. return 0;
  140. }

[Ynoi2011]初始化 题解的更多相关文章

  1. 洛谷P5309 Ynoi 2011 初始化 题解

    题面. 我也想过根号分治,但是题目刷得少,数组不敢开,所以还是看题解做的. 这道题目要用到根号分治的思想,可以看看这道题目和我的题解. 题目要求处理一个数组a,支持如下操作. 对一个整数x,对数组长度 ...

  2. 从 洛谷P5309 Ynoi2011 初始化 看卡常

    一般情况下,程序运行消耗时间主要与时间复杂度有关,超时与否取决于算法是否正确. 但对于某些题目,时间复杂度正确的程序也无法通过,这时我们就需要卡常数,即通过优化一些操作的常数因子减少时间消耗. 比如这 ...

  3. 题解 洛谷 P5311 【[Ynoi2011]成都七中】

    每次询问是关于 \(x\) 所在的连通块,所以考虑用点分树来解决本题. 点分树上每个节点所对应的子树,都是原树中的一个连通块.询问中给定 \(x\) 和区间 \([l,r]\),其就已经确定了原树的一 ...

  4. poj2391 Ombrophobic Bovines 题解

    http://poj.org/problem?id=2391 floyd+网络流+二分 题意:有一个有向图,里面每个点有ai头牛,快下雨了牛要躲进雨棚里,每个点有bi个雨棚,每个雨棚只能躲1头牛.牛可 ...

  5. LeetCode OJ 题解

    博客搬至blog.csgrandeur.com,cnblogs不再更新. 新的题解会更新在新博客:http://blog.csgrandeur.com/2014/01/15/LeetCode-OJ-S ...

  6. 2017 google Round D APAC Test 题解

    首先说明一下:我只是用暴力过了4道题的小数据,就是简单的枚举,大数据都不会做!下面的题解,是我从网上搜到的解答以及查看排行榜上大神的答案得出来的. 首先贴一下主要的题解来源:http://codefo ...

  7. HDU2094(产生冠军)题解

    HDU2094(产生冠军)题解 以防万一,题目原文和链接均附在文末.那么先是题目分析: [一句话题意] 根据给定现有比赛结果推断分析冠军.(这描述...我建议还是看题吧,题不长) [题目分析] 给出的 ...

  8. Java JVM 类的连接与初始化 [ 转载 ]

    Java类的连接与初始化 (及2013阿里初始化笔试题解析)  转自http://www.cnblogs.com/iceAeterNa/p/4876747.html         Java虚拟机通过 ...

  9. 2015浙江财经大学ACM有奖周赛(一) 题解报告

    2015浙江财经大学ACM有奖周赛(一) 题解报告 命题:丽丽&&黑鸡 这是命题者原话. 题目涉及的知识面比较广泛,有深度优先搜索.广度优先搜索.数学题.几何题.贪心算法.枚举.二进制 ...

随机推荐

  1. SpringCloud Alibaba实战(9:Hystrix容错保护)

    源码地址:https://gitee.com/fighter3/eshop-project.git 持续更新中-- 在上一节我们已经使用OpenFeign完成了服务间的调用.想一下,假如我们一个服务链 ...

  2. gRPC(2):四种基本通信模式

    在 gRPC(1):入门及简单使用(go) 中,我们实现了一个简单的 gRPC 应用程序,其中双方通信是简单的请求-响应模式,没发出一个请求都会得到一个响应,然而,借助 gRPC 可以实现不同的通信模 ...

  3. CapsuleAO实现的学习

    正是一个炎夏,又到了整活的好时候.最近抽些时间研究下CapsuleAO,记述实践体会. 1.简介 这是一个通过在角色骨骼上绑定虚拟胶囊体并以数学方法实现胶囊近似的AO环境光遮蔽效果的方法, 当角色处于 ...

  4. Unity3D-UI--Layout组件

    Layout组件 自动排版 Layout Group Vertical Layout Group 垂直布局 [垂直布局组]组件将其子布局元素彼此重叠.它们的高度由各自的最小高度,首选高度和柔性高度决定 ...

  5. <5人公司极简研发方案

    人过35,被年轻人卷走了一大半,还停留在这个行业的,不是在创业,就是在创业的路上. 创业很难,刚开始没钱没人,啥都要自己干,一个字累.好处是地基是自己搭的,心里有底.不过博主最近健忘的毛病愈发严重了, ...

  6. html的题库(含答案)

    该题库仅供巩固自身HTML知识 Tip:<为< 单选题 1.下面标记中,用来显示段落的标记是(  D  ). A.<h1> B.<br /> C.<img / ...

  7. 什么样的CRM系统适合以客户为中心的企业?

    我们不难发现,现代的企业非常依赖CRM系统,这是因为20%的优质客户能够给企业带来80%的利润,而老客户的推荐可以带来60%的客户增长.那么,什么样的CRM系统适合企业?随着信息技术的发展,客户开始拥 ...

  8. Git——基础篇

    Git--基础篇 Git简而言之就是个版本控制工具,用于跟踪和管理代码的工具. 版本控制 本地版本控制 就是我们自己本地对文档进行保存文件的每一个修改版本的记录. 集中式版本控制--SVN 有一个远程 ...

  9. robotframework安装robotframework-requests库遇到的几种问题

    robotframework-requests库依赖于requests库,所以如果安装robotframework-requests库后,在RF中的RequestsLibrary不能使用或者使用pyt ...

  10. Spring Ioc和依赖注入

    总结一下近来几天的学习,做个笔记 以下是Spring IoC相关内容: IoC(Inversion of Control):控制反转: 其主要功能可简单概述为:将 用 new 去创建实例对象,转换为让 ...