URAL 2062 树状数组
一个长度为n的数组 每次对lr区间进行修改 如果要修改i 则对i i*2 i*3...都修改 最后单点查询值
思想是利用树状数组维护每一个区间的更新值 查询的时候得出这个点的所有因子的查询值的和 加上这个点的最初值
因为对树状数组理解不深再次错过绝杀...
由于是维护每个点的修改量 所以每次修改 都进行add(l,val) add(r+1,-val)
这时候 如果要求单点的修改值 需要sum(x) 而非sum(x)-sum(x-1)
因为没有将初值进行add 所以c数组存放的其实不是一个前缀和 而是一个差分 差分的前缀和就是差分值
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<map>
#include<vector>
#include<queue>
using namespace std;
#define L long long
#define pb push_back
L n ;
L a[300050] ;
vector<L >v[1000050] ;
L c[3000050] ;
L lowbit(L x){
return (x&-x);
}
void add(L x,L w)
{
while(x<=n)
{
c[x]+=w;
x+=lowbit(x);
}
}
L sum(L x)
{
L tot=0;
while(x)
{
tot+=c[x];
x-=lowbit(x);
}
return tot;
}
int main(){
scanf("%lld",&n);
for(L i = 1; i <= n ; i ++ )
scanf("%lld",&a[i]);
for(L i = 1; i <= n ; i ++ ){
for(L j = 1; j * i <= n ; j ++) {
v[j*i].pb(i) ;
}
}
memset(c,0,sizeof(c));
L q;
scanf("%lld",&q);
while(q--){
L op;
scanf("%lld",&op);
if(op==2){
L l , r;
L val;
scanf("%lld%lld%lld",&l,&r,&val);
add(l,val);
add(r+1,-val);
}
else {
L w;
scanf("%lld",&w);
L ans=0;
for(L i=0;i<v[w].size();i++){
L x=v[w][i];
ans += sum(x) ;
}
printf("%lld\n",ans+a[w]);
}
}
}
..我的绝杀..
URAL 2062 树状数组的更多相关文章
- ural 1989(树状数组+多项式hash)
		题意:给出一个字符串.有两种操作,一个是p a b,问字符串从位置a到位置b的子串是否是一个回文子串.还有一个操作 c a b,把字符串位置a的字符替换为b. 题解:由于字符串长度为1e5且问的次数也 ... 
- Ural 2062:Ambitious Experiment(树状数组 || 分块)
		http://acm.timus.ru/problem.aspx?space=1&num=2062 题意:有n个数,有一个值,q个询问,有单点询问操作,也有对于区间[l,r]的每个数i,使得n ... 
- ural Ambitious Experiment 树状数组
		During several decades, scientists from planet Nibiru are working to create an engine that would all ... 
- HDU1541 树状数组
		Stars Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ... 
- POJ 2352Stars 树状数组
		Stars Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 42898 Accepted: 18664 Descripti ... 
- POJ-2352 Stars   树状数组
		Stars Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 39186 Accepted: 17027 Description A ... 
- hdu 1541/poj 2352:Stars(树状数组,经典题)
		Stars Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ... 
- Stars(树状数组或线段树)
		Stars Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 37323 Accepted: 16278 Description A ... 
- POJ2352Stars【树状数组】
		Stars Description Astronomers often examine star maps where stars are represented by points on a pla ... 
随机推荐
- SSH配置免秘钥登录
			一. SSH 配置免秘要登录 配置SSH 免秘要登录,虽然就那么几步,但总是会出现点小问题,今天就做下记录.SSH 免秘钥就是让两台机器相互信任,不需要输入密码就能相互登录.配置相互信任就是把各自的 ... 
- PHP中mysql_fetch_row()、mysql_fetch_assoc()和mysql_fetch_array()的联系
			总是记不住或者混淆mysql_fetch_row().mysql_fetch_assoc()和mysql_fetch_array()这三个函数的朋友们注意了,今天我在这里给大家总结一下他们之间的关系, ... 
- Java基础 - 函数与方法
			java 是一门面向对象编程,其它语言中的函数也就是java中的方法 方法的基本使用方法 package com.demo7; /* * 函数/方法 * * 定义格式: * 修饰符 返回值类型 方法名 ... 
- PHP与ASP转义双引号的区别
			PHP: 转义双引号:\" ASP: 转义双引号:"" PHP与ASP转义双引号的区别 
- SingleNumber
			Given an array of integers, every element appears twice except for one. Find that single one. Note: ... 
- JS单例
			s = (function S(){ var bean; function get(){ if(bean){ return bean }else{ bean = T(); return bean; } ... 
- (4.16)sql server迁移DB文件(同一DB内)
			SQL Server 修改数据库物理文件存在位置 关键词:迁移文件,迁移temp库(这怎么迁移呢,用方法2即可,需要重启实例) 三种均需要离线: 一共分为(1)脱机迁移和(2)在线迁移. (1)迁移方 ... 
- 关于android编程中service和activity的区别
			一. 绝大部分情况下,Service的作用是用来“执行”后台的.耗时的.重要的任务,三者缺一不可,而最重要的原因是第三点:要执行重要的任务. 因为当一个进程启动了Service后,进程的优先级变高了, ... 
- 《Python机器学习》笔记(三)
			使用scikit-learning 实现机器学习分类算法 分类算法的选择 没有免费的午餐理论:没有任何一种分类器可以在所有可能的应用场景下都有良好的表现. 实践证明,只有比较了多种学习算法的性能,才能 ... 
- 拟牛顿法——DFP、BFGS、L-BFGS
			DFP 该算法的核心是:通过迭代的方法,对Hk+1(-1)近似.迭代方式: 其中D0通常取为单位矩阵,关键是每一步构造矫正矩阵△Dk. 考虑△Dk 的待定形式为 拟牛顿的条件 这里插播一下拟牛顿的条件 ... 
