CodeChef Chef and Segments

原创 2013年12月05日 22:33:26

题目


求区间积%mod

因为每个数<=100,质因数分解之后,就只需要计算对应质数的次方.

树状数组+快速幂


#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<vector>
using namespace std;
vector<int>prime;
bool vis[110];
inline void init()
{
    memset(vis,0,sizeof(vis));
    for(int i=2;i<=100;i++)
    {
        if(vis[i]==0)
        {
            prime.push_back(i);
            for(int j=i*2;j<=100;j+=i)
                vis[j]=1;
        }
    }
}
int c[25][100010],n,a,t,b,m;
inline int lowbit(int x)
{
    return x&(-x);
}
inline void add(int x,int i,int val)
{
    while(x<=n)
    {
        c[i][x]+=val;
        x+=lowbit(x);
    }
}
inline int getsum(int x,int i)
{
    int ans=0;
    while(x>0)
    {
        ans+=c[i][x];
        x-=lowbit(x);
    }
    return ans;
}
inline long long Pow(int a,int b,int m)
{
    long long d=1LL,t=a*1LL;
    while(b)
    {
        if(b&1) d=d*t%m;
        b>>=1;
        t=t*t%m;
    }
    return d;
}
int main()
{
    init();
    while(~scanf("%d",&n))
    {
        memset(c,0,sizeof(c));
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&a);
            for(int j=0;j<prime.size();j++)
            {
                int num=0;
                while(a%prime[j]==0)
                {
                    num++;
                    a/=prime[j];
                }
                if(num!=0) add(i,j,num);
                if(a==1) break;
            }
        }
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d%d%d",&a,&b,&m);
            long long ans=1;
            for(int i=0;i<prime.size();i++)
            {
                ans*=Pow(prime[i],getsum(b,i)-getsum(a-1,i),m);
                ans%=m;
            }
            printf("%lld\n",ans%m);
        }
    }
}


codechef Chef and Swaps

Problem Description This time, Chef has given you an array A containing N elements. He had a...

CodeChef JUNE17 - Chef and Prime Queries

题意 给定包含 NN 个数的序列 aa,求序列[L,R][L, R] 内的数,以范围在[x,y][x, y] 内的质数为底的指数之和!包含Q个询问。 N≤105N \le 10^5, x,y...

codechef November Challenge 2014 .Chef and Churu

链接地址:here题意: 给NN(≤105\le 10^5)个数,给定NN个函数,每个函数为序列中第LiL_i 到第RiR_i个数的和,有QQ(≤105\le 10^5)个询问,有两种类型的操作:...

codechef Chef and sequence

Problem Description You are given an array that consists of n integer numbers. You have to change a...

Codechef Chef and Frogs

Problem Description

【CodeChef】Chef and Churu 分块+树状数组

【分析】分块+树状数组 对于每个fi,可以直接使用树状数组求出。 所以我们可以使用分块,中间的直接用块的答案,边上的用树状数组。 首先我们进行预处理,记录第i块中每个编号的个数,这里用前缀和,并求出...

codechef Chef and easy problem 2

Roma gave Chef an array of intergers. Chef wants to make all integers in the array equal to 1. In ...

Codechef Chef and Reversing

Problem Description Sometimes mysteries happen. Chef found a directed graph with N vertices and M e...

codechef Chef and Left-Right

Problem Description

CodeChef "Chef and Churus" 分块+树状数组

题意给定nn个数和nn个区间和f[i]=∑rik=liakf[i]=\sum_{k=l_i}^{r_i} a_k,支持两种操作: 1. 将aia_i变为xx; 2. 求编号为xx到yy的所有ff的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CodeChef Chef and Segments
举报原因:
原因补充:

(最多只允许输入30个字)