洛谷 P1483 序列变换
题目描述
给定一个由n个整数构成的序列,你需要对它进行如下操作:
操作1:输入格式“1 x y”,表示把所有akx都加上y。
操作2:输入格式“2 j”,表示输出a[j]。
输入输出格式
输入格式:
第一行,两个数n,m,表示有n个数,m条操作。
第二行,n个数a[1],a[2],…,a[n]。
接下来m行,为m条操作。
输出格式:
输出若干行,每行对应一次操作2。
输入输出样例
说明
对于40%的数据,n<=100
对于100%的数据,n<=1000000,m<=100000,|a[i]|<=1000000,|y|<=1000000,x<=n,j<=n,操作2不超过10000条。
思路:一开始一看以为是一个线段树,后来才发现,是一个模拟就可以过去的题目。
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define MAXN 1000010 using namespace std; int n,m; long long num[MAXN],bns[MAXN]; int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%lld",&num[i]); for(int i=1;i<=m;i++){ int pos;int x,y; scanf("%d%d",&pos,&x); if(pos==1){ scanf("%d",&y); bns[x]+=1ll*y; } else if(pos==2){ long long ans=num[x]; for(int j=1;j*j<=x;j++) if(x%j==0){ if(j*j!=x) ans+=bns[j]+bns[x/j]; else ans+=bns[j]; } cout<<ans<<endl; } } }
细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。
雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。