第二题 亚索的粒子实验

【问题描述】

亚索是一名伟大的科学家,他最近在做一个粒子的实验,粒子初始有一定的能量,实验过程中倘若第i个粒子被注入k能量,那该粒子就会增加k能量,同时由于辐射作用,第2i,3i,4i……(即i的倍数的粒子)也会增加k能量。

他有一台特殊的机器,能够为一段连续的粒子注入一定的能量,此时辐射同样存在,实验过程中,由于他需要取出某些粒子观察一下数据变化,但这十分困扰他,因此,他找到了聪明的你们,希望你们能在他需要数据的时候告诉他相应粒子能量的大小。

【输入格式】

输入文件名为yasuo.in。

输入第 1 行包含 1 个正整数 n ,表示 n 个粒子。

接下来第 2 行有n个数,第i个数ai表示第i个粒子的初始能量值。

第 3 行包括一个数q,表示操作数,包括询问和操作。

接下来 q 行,每行格式如下:

1 i,表示询问第i个粒子当前的能量值。

2 l r d,表示对[l,r]区间中的所有粒子注入d能量。

【输出格式】

输出文件名为yasuo.out。

对于每一个询问输出一行,表示相应粒子的能量值。

【输入输出样例1

yasuo.in

yasuo.out

3

1 2 3

2

2 1 3 5

1 2

12

【输入输出样例2

yasuo.in

yasuo.out

6

1 2 1 4 5 6

5

2 2 4 2

1 3

1 4

2 3 5 1

1 5

3

8

6

 

【数据规模与约定】

对于 30%的数据 0<=n<=100,0<=q<=100.

对于 70%的数据 0<=q<=10^5.

对于 100%的数据 0<=n<=10^5,0<=q<=5*10^5,0<=ai<=10^6

1<=i<=n,1<=l<=r<=n,0<=d<=10^6

半年前做这道题是一脸懵逼,半年后依然懵逼= =,撸了半个多小时线段树+调了1个多小时仍然是只过样例,看了std才发现是分块!

具体实在没啥好说的了,直接看代码好了,代码实在是太清晰了。。。

#include <cstdio>
#include <cmath> const int maxn = 100005; int n, div[maxn][135], idx[maxn], opr, t1, t2, p, lmt, q, a[maxn], x, y;
long long f[maxn], g[maxn], t3, ans; int main(void) {
freopen("yasuo.in", "r", stdin);
freopen("yasuo.out", "w", stdout);
scanf("%d", &n);
p = (int)sqrt((float)n + 0.5f);
for (int i = 1; i <= n; ++i) {
scanf("%d", a + i);
}
div[1][idx[1]++] = 1;
for (int i = 2; i <= n; ++i) {
lmt = (int)sqrt((float)i + 0.5f);
for (int j = 1; j <= lmt; ++j) {
if (i % j == 0) {
div[i][idx[i]++] = j;
if (j != i / j) {
div[i][idx[i]++] = i / j;
}
}
}
} scanf("%d", &q);
while (q--) {
scanf("%d", &opr);
if (opr == 1) {
scanf("%d", &t1);
ans = (long long)a[t1];
for (int i = 0; i < idx[t1]; ++i) {
t2 = div[t1][i];
ans += f[t2] + g[t2 / p];
}
printf("%I64d\n", ans);
}
else {
scanf("%d%d%I64d", &t1, &t2, &t3);
x = t1 / p;
y = t2 / p;
if (x == y) {
for (int i = t1; i <= t2; ++i) {
f[i] += t3;
}
continue;
}
for (int i = t1; i < (x + 1) * p; ++i) {
f[i] += t3;
}
for (int i = x + 1; i < y; ++i) {
g[i] += t3;
}
for (int i = y * p; i <= t2; ++i) {
f[i] += t3;
}
}
}
return 0;
}

  

[GZOI2016] 亚索的量子实验【分块】的更多相关文章

  1. 量子:基于ERP块对的两步量子直接通信

    学习论文: 题目:Two-step quantum direct communication protocol using the Einstein-Podolsky-Rosen pair block ...

  2. Vertica集群扩容实验过程记录

    需求: 将3个节点的Vertica集群扩容,额外增加3个节点,即扩展到6个节点的Vertica集群. 实验环境: RHEL 6.5 + Vertica 7.2.2-2 步骤: 1.三节点Vertica ...

  3. 【图像处理】第三次实验:JPEG图像压缩

    1.任务说明 将LENA图像用JPEG方式压缩. 2.算法原理 JPEG(Joint Photographic Experts Group)是一个由ISO和IEC两个组织机构联合组成的一个专家组,负责 ...

  4. 第一部分:IBM量子体验

    (一)量子世界    今天的计算机使用标准的(或用物理学家的话来说,“经典的”)计算模型来执行计算与处理信息,此计算模型要追溯到图灵(Turing)和冯・诺伊曼(Von Neumann)时期.在此模型 ...

  5. 20162318 实验三《 敏捷开发与XP实践》实验报告

    北京电子科技学院(BESTI) 实 验 报 告 课程:程序设计与数据结构 班级:1623班 姓名:张泰毓 指导老师:娄老师.王老师 实验日期:2017年5月12日 实验密级:非密级 实验器材:带Lin ...

  6. 20172302 《Java软件结构与数据结构》实验三:查找与排序实验报告

    课程:<Java软件结构与数据结构> 班级: 1723 姓名: 侯泽洋 学号:20172302 实验教师:王志强老师 实验日期:2018年11月19日 必修/选修: 必修 实验内容 (1) ...

  7. 20172309 《Java软件结构与数据结构》实验三报告

    课程:<程序设计与数据结构(下)> 班级:1723 姓名: 王志伟 学号:20172309 实验教师:王志强老师 实验日期:2018年11月2日 必修/选修: 必修 实验内容: 实验一: ...

  8. Burpsuit分块传输插件绕WAF原理和技巧(转)

      0x00 原理 给服务器发送payload数据包,使得waf无法识别出payload,当apache,tomcat等web容器能正常解析其内容.如图一所示 0x02  实验环境 本机win10+x ...

  9. 20172301 《Java软件结构与数据结构》实验三报告

    20172301 <Java软件结构与数据结构>实验三报告 课程:<Java软件结构与数据结构> 班级: 1723 姓名: 郭恺 学号:20172301 实验教师:王志强老师 ...

随机推荐

  1. java.net.URISyntaxException的解决办法

    java.net.URISyntaxException的解决办法 近日在用HttpClient访问抓取汇率时,为了省力,直接采用 String url = "http://api.liqwe ...

  2. MatConvNet 练习使用CNN

    首先在 VGG Convolutional Neural Networks Practical 官网上做了四个练习.现在代码可以直接用 但是在using pretrained models中有个错,n ...

  3. 【APUE】vim常用命令

    转自:http://coolshell.cn/articles/5426.html 基本命令: i → Insert 模式,按 ESC 回到 Normal 模式. x → 删当前光标所在的一个字符. ...

  4. coco2d-x怎样创建project

    不知道coco2d-x从那个版本号開始用python创建project,一句话搞定,确实省去了好多麻烦. 首先定位到coco2d-x的文件夹到cocos2d-x-2.2.3\cocos2d-x-2.2 ...

  5. 聚合类新闻client产品功能点详情分析

    产品功能点 功能 今日头条 百度新闻 鲜果 ZAKER 媒体订阅 × √ ★ ★ 个性化内容推荐 ★ √ × × 个性化订阅(RSS) × × ★ × 视频新闻 × × × × 评论盖楼 √ √ √ ...

  6. #Virtual hosts #Include conf/extra/httpd-vhosts.conf 开启就不能启动apache

    #Virtual hosts#Include conf/extra/httpd-vhosts.conf我只要把其中任何一个开启就是吧#去掉就启动不了apache.怎么回事error.log是这样的ht ...

  7. Android Studio运行app时提示Error: Please select Android SDK

    最近开启了一个android项目,点“Run”键运行app,并报错Error:Please select Android SDK: 选择 File -> Project Structure 调整 ...

  8. leetcode 656. Coin Path

    Given an array A (index starts at 1) consisting of N integers: A1, A2, ..., AN and an integer B. The ...

  9. YTU 2426: C语言习题 字符串排序

    2426: C语言习题 字符串排序 时间限制: 1 Sec  内存限制: 128 MB 提交: 262  解决: 164 题目描述 用指向指针的指针的方法对5个字符串排序并输出.要求将排序单独写成一个 ...

  10. sphinx索引部分源码续——过程:连接到CSphSource对应的sql数据源,通过fetch row取其中一行,然后解析出field,分词,获得wordhit,最后再加入到CSphSource的Hits里

    后面就是初始化一些存储结构,其中重点说下缓存出来的几个临时文件分别的作用.结尾时tmp0的存储的是被上锁的Index,有些Index正在被查询使用 故上锁.tmp1,即对应将来生成的spp文件,存储词 ...