• ural2062 Ambitious Experiment


    Ambitious Experiment

    Time limit: 3.0 second
    Memory limit: 128 MB
    During several decades, scientists from planet Nibiru are working to create an engine that would allow spacecrafts to fall into hyperspace and move there with superluminal velocity. To check whether their understanding of properties of hyperspace is right, scientists have developed the following experiment.
    A chain of n particles is placed in hyperspace. Positions of particles in the chain are numbered from 1 to n. Initially, ith particle has charge ai.
    According to the current theory, if particle number i got special radiation with power d, oscillations would spread by hyperspace and increase by d charge of particles with numbers i, 2i, 3iand so on (i.e. with numbers divisible by i).
    Using a special device, scientists can direct the radiation of the same power at a segment of adjacent particles. For example, suppose that initially there were 6 particles with zero charges, and scientists have sent radiation with power five to particles with numbers 2 and 3. Then charge of 2nd, 3rd, and 4th particles will increase to five, and charge of 6th particle will increase to ten (the oscillations will reach it twice). Charge of other particles won’t change.
    Charge of particles can’t change without impact of the device.
    During the experiment, the scientists plan to perform actions of the following types:
    1. Measure current charge of the particle number i.
    2. Direct radiation with power d at particles with numbers from l to r inclusive.
    Your program will be given a list of performed actions. For every action of the first type the program should output value of expected charge of the particle calculated in accordance with the current theory described above.
    If the expected charges of the particles coincide with charges measured during the experiment, it will turn out that scientists’ understanding of hyperspace is right, and they will be able to start building of the hyperdrives. Then inhabitants of Nibiru will finally meet their brothers from Earth in just a few years!

    Input

    The first line contains a single integer n — number of particles (1 ≤ n ≤ 3 · 105).
    The second line contains n integers ai separated by spaces — initial charges of the particles (0 ≤ai ≤ 106).
    The third line contains a single integer q — number of actions in the experiment (1 ≤ q ≤ 3 · 105).
    Each of the following q lines contain two or four integers — a description of the next action in one of the following formats:
    • i — measure current charge of the particle number i (1 ≤ i ≤ n).
    • l r d — direct radiation with power d at particles with numbers from l to r inclusive (1 ≤l ≤ r ≤ n, 0 ≤ d ≤ 106).

    Output

    For each query output the expected charge of the ith particle.

    Samples

    inputoutput
    3
    1 2 3
    2
    2 1 3 5
    1 2
    
    12
    
    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
    

    分析:对每个询问,只有他的因子才会对答案有贡献,所以sqrt(n)枚举因子;

       树状数组前缀和可以获得因子的贡献;

    代码:

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cmath>
    #include <algorithm>
    #include <climits>
    #include <cstring>
    #include <string>
    #include <set>
    #include <map>
    #include <queue>
    #include <stack>
    #include <vector>
    #include <list>
    #define rep(i,m,n) for(i=m;i<=n;i++)
    #define rsp(it,s) for(set<int>::iterator it=s.begin();it!=s.end();it++)
    #define mod 1000000007
    #define inf 0x3f3f3f3f
    #define vi vector<int>
    #define pb push_back
    #define mp make_pair
    #define fi first
    #define se second
    #define ll long long
    #define pi acos(-1.0)
    #define pii pair<int,int>
    #define Lson L, mid, rt<<1
    #define Rson mid+1, R, rt<<1|1
    const int maxn=3e5+10;
    using namespace std;
    ll gcd(ll p,ll q){return q==0?p:gcd(q,p%q);}
    ll qpow(ll p,ll q){ll f=1;while(q){if(q&1)f=f*p%mod;p=p*p%mod;q>>=1;}return f;}
    int n,m,k,t,q,a[maxn];
    ll b[maxn];
    void add(int x,int y)
    {
        for(int i=x;i<=n;i+=(i&(-i)))
            b[i]+=y;
    }
    ll get(int x)
    {
        ll ans=0;
        for(int i=x;i;i-=(i&(-i)))
            ans+=b[i];
        return ans;
    }
    int main()
    {
        int i,j;
        scanf("%d",&n);
        rep(i,1,n)scanf("%d",&a[i]);
        scanf("%d",&q);
        while(q--)
        {
            int c[4];
            scanf("%d",&c[0]);
            if(c[0]==1)
            {
                scanf("%d",&c[1]);
                ll ans=0;
                for(i=1;i*i<=c[1];i++)
                {
                    if(c[1]%i)continue;
                    ans+=get(i);
                    if(i!=c[1]/i)ans+=get(c[1]/i);
                }
                printf("%lld
    ",ans+=a[c[1]]);
            }
            else
            {
                rep(i,1,3)scanf("%d",&c[i]);
                add(c[1],c[3]);add(c[2]+1,-c[3]);
            }
        }
        //system("Pause");
        return 0;
    }
  • 相关阅读:
    实现快速读写配置文件的内容,可以用于读取*.exe.config文件或者Web.Config文件的内容,或者可以读取指定文件的配置项.
    DevExpress Grid控件经典常用功能代码收集
    DevExpress XtraGrid数据绑定:添加非绑定列
    DevExpress XtraGrid网格控件示例六:自定义合并单元格
    DevExpress XtraGrid网格控件示例七:列过滤
    DevExpress XtraGrid网格控件示例三:获取当前处于编辑状态的值
    DevExpress XtraGrid网格控件示例四:初始化新建行的单元格
    DevExpress XtraGrid网格控件示例五:验证终端用户输入的数据
    ASP.NET MVC 音乐商店
    ASP.NET MVC 音乐商店
  • 原文地址:https://www.cnblogs.com/dyzll/p/5824836.html
Copyright © 2020-2023  润新知