【洛谷P1483】序列变换
题目大意:给定一个长度为 N 的序列,有 M 个操作,支持将下标为 x 的倍数的数都加上 y,查询下标为 i 的元素的值。
题解:由于查询操作很少,相对的,修改操作很多。若直接模拟修改操作,即:枚举倍数,容易超时。现考虑记录下每次 x 位置的修改值,每次查询一个位置时,只需枚举这个位置的约数,将这个位置所有约数处的修改加入答案贡献即可。
代码如下
#include <bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define mp make_pair
#define all(x) x.begin(),x.end()
#define cls(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long ll;
typedef pair<int,int> P;
const int dx[]={0,1,0,-1};
const int dy[]={1,0,-1,0};
const int mod=1e9+7;
const int inf=0x3f3f3f3f;
const int maxn=1e6+10;
const double eps=1e-6;
inline ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
inline ll sqr(ll x){return x*x;}
inline ll fpow(ll a,ll b,ll c){ll ret=1%c;for(;b;b>>=1,a=a*a%c)if(b&1)ret=ret*a%c;return ret;}
inline ll read(){
    ll x=0,f=1;char ch;
    do{ch=getchar();if(ch=='-')f=-1;}while(!isdigit(ch));
    do{x=x*10+ch-'0';ch=getchar();}while(isdigit(ch));
    return f*x;
}
/*------------------------------------------------------------*/
int n,q,a[maxn];
ll d[maxn];
void read_and_parse(){
    n=read(),q=read();
    for(int i=1;i<=n;i++)a[i]=read();
}
inline ll get(int idx){
    ll ret=0;
    for(int i=1;i<=sqrt(idx);i++){
        if(idx%i!=0)continue;
        ret+=d[i];
        if(i!=idx/i)ret+=d[idx/i];
    }
    return ret;
}
void solve(){
    while(q--){
        int opt=read();
        if(opt==1){
            int idx=read(),val=read();
            d[idx]+=val;
        }else{
            int idx=read();
            printf("%lld\n",get(idx)+a[idx]);
        }
    }
}
int main(){
    read_and_parse();
    solve();
    return 0;
}
【洛谷P1483】序列变换的更多相关文章
- 洛谷 P1483 序列变换
		https://www.luogu.org/problemnew/show/P1483 数据范围不是太大. 一个数组记录给k,记录每个数加了多少. 对于查询每个数的大小,那么就枚举每个数的因子,加上这 ... 
- 洛谷 P1032 字符变换
		洛谷 P1032 字符变换 题目描述 已知有两个字串 A,B 及一组字串变换的规则(至多 6 个规则): A1 -> B1 A2 -> B2 规则的含义为:在 A 中的子串 A1 ... 
- 洛谷 P4597 序列sequence 解题报告
		P4597 序列sequence 题目背景 原题\(\tt{cf13c}\)数据加强版 题目描述 给定一个序列,每次操作可以把某个数\(+1\)或\(-1\).要求把序列变成非降数列.而且要求修改后的 ... 
- [洛谷P2127] 序列排序
		洛谷题目链接:序列排序 题目描述 小C有一个N个数的整数序列,这个序列的中的数两两不同.小C每次可以交换序列中的任意两个数,代价为这两个数之和.小C希望将整个序列升序排序,问小C需要的最小代价是多少? ... 
- 洛谷P4891 序列 || 膜法阵,魔法阵
		https://www.luogu.org/problemnew/show/P4891 一道几乎一样的题http://210.33.19.103/contest/1130/problem/3 题面ht ... 
- 洛谷P4891 序列(势能线段树)
		洛谷题目传送门 闲话 考场上一眼看出这是个毒瘤线段树准备杠题,发现实在太难调了,被各路神犇虐哭qwq 考后看到各种优雅的暴力AC......宝宝心里苦qwq 思路分析 题面里面是一堆乱七八糟的限制和性 ... 
- 【洛谷P1963】变换序列
		题目大意:对于一个顺序序列,求一个合法置换,可以满足一些约束,若存在多个合法置换,则输出字典序最小的一个置换. 题解:对于序列的置换是否有解的问题,可以和二分图的完美匹配相关联.由于是字典序最小,显然 ... 
- 洛谷 [P1963] [NOI2009] 变换序列
		这是一道二分图匹配的题 先%dalao博客 建图并没有什么难的,但是关键在于如何使字典序最小. 一个很显然的想法是先求出一个完美匹配,然后从x集合的第一个元素开始,如果该元素匹配的较小的一个,那么继续 ... 
- 洛谷P1963 [NOI2009]变换序列(二分图)
		传送门 我可能真的只会网络流……二分图的题一点都做不来…… 首先每个位置有两种取值,所以建一个二分图,只要有完美匹配就说明有解 考虑一下每一个位置,分别让它选择两种取值,如果都不能形成完美匹配,说明无 ... 
随机推荐
- MQ4入门篇(一)
			写一个下单功能,和一个平仓功能: 下单: 1:下单使用到的函 int OrderSend(string symbol, int cmd, double volume, double price, in ... 
- Microsoft Visual Studio Ultimate 2013密钥
			Visual Studio Ultimate 2013 KEY(密钥):BWG7X-J98B3-W34RT-33B3R-JVYW9Visual Studio Premium 2013 KEY(密钥): ... 
- ubuntu18.04 安装 php7.2
			sudo apt-get install software-properties-common python-software-properties sudo add-apt-repository p ... 
- IntelliJ IDEA详情
			详情请参考http://www.phperz.com/article/15/0923/159043.html 
- sqlmap-学习1 配置环境
			sqlmap是一款非常强大的开源sql自动化注入工具,可以用来检测和利用sql注入漏洞.它由python语言开发而成,因此运行需要安装python环境 1 安装 python (https://www ... 
- vue組件
			組件有局部組件和全局組件,全局組件,其它的元素能夠調用. Prop父組件子組件看不大明白. 
- Bootstrap之响应式导航栏
			代码: <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8 ... 
- nginx反向代理(动静分离)
			使用反向代理(动静分离)可以让nginx专注静态内容,把动态请求交给apache来处理,发挥各自的优势,而且整个架构更加清晰: 这里假设你已经搭建好了nginx环境; 为了简单起见,就不用源码编译安装 ... 
- 三星Galaxy S10可望率先应用于1TB的手机内存
			导读 三星电子(Samsung Electronics)1月30日宣布,已经开始量产业界首款容量高达1TB的嵌入式通用闪存存储器(embedded Universal Flash Storage,eU ... 
- JVM安全点操作与测试小记
			JVM的安全点学习与代码测试 监控安全点(打印JVM停顿时间,不止GC,处理毛刺): -XX:+PrintGC -XX:+PrintGCApplicationStoppedTime 取消偏向锁: -X ... 
