zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    Spring Boot Test(转)
    volatile的可见性和有序性是什么(转)
    消息队列漫谈:如何使用消息队列实现分布式事务?(转)
    idea IntelliJ修改代码后自动重启(转)
    Spring Boot自动配置实现原理(转)
    Java注解(Annotation)原理详解(转)
    Spring中@Import注解的作用和使用(转)
    i春秋六周年庆丨欢乐相聚,暖心同行,未来可期!
    王者之战,志在巅峰丨2021互联网安全城市巡回赛•北京站圆满收官!
    2021互联网安全城市巡回赛——风起云涌,再战京城!
  • 原文地址:https://www.cnblogs.com/dyzll/p/5824836.html
Copyright © 2011-2022 走看看