【链接】 我是链接,点我呀:)

【题意】

在这里输入题意

【题解】

那个D函数它的下降速度是很快的。
也就是说到最后他会很快的变成2或者1
而D(2)==2,D(1)=1
也就是说,几次操作过后很多数字实际上就不会发生变化了。
我们可以以这个为切入点。

可以用树状数组写,也可以用线段树写。

如果用树状数组写的话。

你需要额外用一个set来维护哪些值是还能变化的。

然后在读入l,r这个范围的时候。

直接用lower_bound查找离它最近的且大于等于它的能改变的值。

将它改变。

然后在树状数组中改变对应位置的值。

如果发现改变之后这个数字变成小于等于2了。

那么就在set中删掉这个值。

这样的话.下次在遍历的时候就不会再找到这个值了。

求和的话,还是用树状数组的求和就好了。

如果用线段树的话。

在改变的时候。

直到l==r的时候再改变。

然后维护一个区间的最大值和区间和。

如果区间的最大值<=2那么直接返回这个区间的和就好了。

【代码】

#include <bits/stdc++.h>
#define ll long long
using namespace std; const int N = 1e6;
const int NN = 3e5; struct BI {
ll a[NN + 10]; int lowbit(int x) {
return x&(-x);
} void add(int x,int y) {
while (x <= NN) {
a[x] += y;
x += lowbit(x);
}
} ll sum(int x) {
ll now = 0;
while (x > 0) {
now += a[x];
x -= lowbit(x);
}
return now;
} ll get_sum(int l, int r) {
return sum(r) - sum(l - 1);
} }b; int f[N+10],n,m,a[NN+10];
set<int> myset;
vector<int> V; int main(){
#ifdef LOCAL_DEFINE
freopen("rush_in.txt", "r", stdin);
#endif
ios::sync_with_stdio(0),cin.tie(0);
for (int i = 1;i <= N;i++)
for (int j = i;j <= N;j+=i)
f[j]++; cin >> n >> m;
for (int i = 1;i <= n;i++) {
cin >> a[i];
myset.insert(i);
b.add(i,a[i]);
} for (int i = 1;i <= m;i++){
int ope,l,r;
cin >> ope >> l >> r;
if (ope==1){ V.clear();
while (1){
auto t = myset.lower_bound(l);
if (t==myset.end()||(*t)>r) break;
V.push_back(*t);
myset.erase(t);
} for (int x:V){
b.add(x,f[a[x]]-a[x]);
a[x] = f[a[x]];
if (a[x]<=2) continue;
myset.insert(x);
}
}else{
cout<<b.get_sum(l,r)<<endl;
}
} return 0;
}

【Educational Codeforces Round 37 F】SUM and REPLACE的更多相关文章

  1. 【Educational Codeforces Round 37 E】Connected Components?

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] bfs. 用一个链表来记录哪些点已经确定在某一个联通快里了. 一开始每个点都能用. 然后从第一个点开始进行bfs. 然后对于它的所有 ...

  2. 【Educational Codeforces Round 37 C】 Swap Adjacent Elements

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 显然l..r这一段连续的1可以把l..r+1变成有序的. 那么就把所有的连续1段变成有序的就好. 看看最后是不是升序即可. [代码] ...

  3. 【Educational Codeforces Round 37 B】 Tea Queue

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 用一个队列来模拟排队就好. 队列放三元组(x,y,z) x表示人的下标,y和z分别表示进入和退出时间. 然后枚举时间从1到5000 ...

  4. 【Educational Codeforces Round 37 A】 Water The Garden

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 记录下水龙头在哪些位置. 然后每秒钟把index-i和index+i改变状态一下就好(置1 [代码] #include <bi ...

  5. Educational Codeforces Round 7 F. The Sum of the k-th Powers 拉格朗日插值法

    F. The Sum of the k-th Powers 题目连接: http://www.codeforces.com/contest/622/problem/F Description Ther ...

  6. 【Educational Codeforces Round 37】F. SUM and REPLACE 线段树+线性筛

    题意 给定序列$a_n$,每次将$[L,R]$区间内的数$a_i$替换为$d(a_i)$,或者询问区间和 这题和区间开方有相同的操作 对于$a_i \in (1,10^6)$,$10$次$d(a_i) ...

  7. 【Educational Codeforces Round 33 D】Credit Card

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 每次遇到0的时候,看看当前累计的delta是多少. 如果大于0,则temp = d-delta; 小于0,取temp2 = min( ...

  8. 【Educational Codeforces Round 33 C】 Rumor

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 显然最后会形成多个集合,每个集合里面的人能够可以互相到达. 则维护并查集的时候,顺便维护一下每个集合里面的最小值就好. 最后答案就为 ...

  9. 【Educational Codeforces Round 33 B】Beautiful Divisors

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 把所有的那些数字打表出来. 逆序枚举就好 [代码] /* 1.Shoud it use long long ? 2.Have you ...

随机推荐

  1. swift语言点评十九-类型转化与检查

    1.oc比较: -(BOOL) isKindOfClass: classObj判断是否是这个类或者这个类的子类的实例 -(BOOL) isMemberOfClass: classObj 判断是否是这个 ...

  2. 原生ajax实现文件上传

    视图层 JS 函数:    <input type="file" onchange="sendFile()" id="up" /> ...

  3. Microsoft Visual Studio 2015打开TFS大量报错问题解决方案

    用vs2015打开项目出现如图错误,尝试对XX项执行 添加 操作时遇到 XX 个错误,因为公司项目比较大,这个错误一直在弹,搜索了下,没有找到出现类似问题的解决方案. 因为这个路径是TFS(Team ...

  4. 【Python】包管理工具pip

    一.pip的安装 1. 将"D:\Python27\"  和 "D:\Python27\Scripts"设置到环境变量当中 2. 安装setup tools 将 ...

  5. parted 4T磁盘

    parted /dev/vdg mklabel gpt mkpart primary ext4 0% 100%

  6. HDU 4366 Successor

    Successor Time Limit: 1000ms Memory Limit: 65536KB This problem will be judged on HDU. Original ID:  ...

  7. 简单搭建zookeeper集群分布式/伪分布式

    分布式搭建 一.下载zookeeper安装包 自行下载:我用的是 zookeeper-3.5.4-beta.tar.gz 二.环境准备 1. 我的虚拟机自带的java是1.7的,这个版本要求java1 ...

  8. 基于SpringMVC+Bootstrap+DataTables实现表格服务端分页、模糊查询

    前言 基于SpringMVC+Bootstrap+DataTables实现数据表格服务端分页.模糊查询(非DataTables Search),页面异步刷新. 说明:sp:message标签是使用了S ...

  9. Android 之 Eclipse没法生成R文件

    这几天被Eclipse整哭了.也怪自己手贱把appcompat_v7给删了. Eclipse创建project假设是兼容4.0下面,会多生成一个projectappcompat_v7,例如以下图: 这 ...

  10. Spring的控制反转(IOC)和依赖注入(DI)具体解释

    Spring的控制反转(IOC)和依赖注入(DI)具体解释 首先介绍下(IOC)控制反转: 所谓控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的.这样控制器就有应 ...