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 Churu 分块+树状数组

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

【codechef FNCS】【Chef and Churu】【分块】

题目大意给出一个序列a,和一些区间求和询问,称作一些函数。有很多个操作,修改a[i]的值,询问一个区间内函数和,就是询问一些区间询问的和。解题思路考虑一个只询问函数的情况,我们可以用分块维护块内的前缀...
  • chunkitlau
  • chunkitlau
  • 2017年02月25日 16:40
  • 180

CodeChef2016年12月问题

text (1)问题描述 (2)要点: (3)代码: text (1)问题描述 (2)要点: (3)代码: text (1)问题描述 (2)要点: (3)代码: text (1)问题描述...
  • zgottingen
  • zgottingen
  • 2016年12月02日 16:59
  • 541

【codechef】Chef and the Cards(dp,推论)

从前有 N 张卡片,在桌上摊成了一排。每张卡片上有两个数字,一个写在上边,一个写在下边,每个数字都是 1 到 N 之间的一个整数(也包含 1 和 N)。同时,在所有卡片的上边的数字中,1 到 N 的每...
  • cacyth
  • cacyth
  • 2015年08月31日 13:19
  • 281

Codechef April Challenge 2017

Similar Dishes & Dish Of Life & Bear and Row 01 这三个题比较简单吧,一眼题。。。 Bear and Clique Distances 题意:给定...
  • u014686462
  • u014686462
  • 2017年04月17日 22:51
  • 181

CodeChef DEC17 C Total Diamonds 递推

题意:n*n的网格,(i,j)的编号为i+j,价值为编号位数中:偶数数字和奇数数字的差的绝对值 例如编号1222 价值为|2+2+2-1|=5. T 注意行与行之间的关系 第i行和第i-1...
  • noone0
  • noone0
  • 2017年12月08日 10:43
  • 59

[多维FFT Bluestein′s Algorithm] Codechef October Challenge 2017 .Chef and Horcrux

题目里那个 其实不重要,只要能算出 pip_i 就行了pip_i 的话发现就是个多维FFT的转移形式到Hillan大佬博客里拷了个代码改一改就好了…Bluestein算法里的FFT可以用暴力卷积代替...
  • Coldef
  • Coldef
  • 2017年10月17日 07:47
  • 251

CodeChef Chef and Churu Problem

Chef and Churu Problem Code: FNCS Add problem to Todo list Tweet 链接All submissions for this probl...
  • qq_35776409
  • qq_35776409
  • 2017年10月25日 17:20
  • 120

codechef Chef and easy problem

Chef and Roma are playing a game. Rules of the game are quite simple. Initially there are N piles o...
  • u013810072
  • u013810072
  • 2014年09月29日 13:19
  • 412

codechef Chef and Left-Right

Problem Description
  • u013810072
  • u013810072
  • 2014年10月08日 20:57
  • 361
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CodeChef Chef and Segments
举报原因:
原因补充:

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