5358: [Lydsy1805月赛]口算训练


Time Limit: 5 Sec  Memory Limit: 512 MB
Submit: 318  Solved: 105
[Submit][Status][Discuss]

Description


Input


 

Output


 

Sample Input


 

Sample Output


 

HINT


 

Source


鸣谢claris提供

分析:


首先看到数最大只有10w,美滋滋,筛出素数,预处理出每个数包含哪些质数,且包含多少个。

然后对于每个质数开棵线段树。
d = (p1^c1)(p2^c2)……(pk^ck),
查询的时候只用查询d的每个质数在[L,R]范围内出现次数是否大于d中次数就行

AC代码:


# include <iostream>
# include <cstdio>
# include <cstring>
# include <vector>
# include <algorithm>
using namespace std;
const int N = 1e5;
vector<pair<int,int> > t[N + ];
int prime[N + ],cnt,root[N + ],lc[N * ],rc[N * ],s[N * ],p,a[N + ];bool vis[N + ];
void shai()
{
for(int i = ;i <= N;i++)
{
if(!vis[i])prime[++cnt] = i;
for(int j = ;j <= cnt;j++)
{
if(i * prime[j] > N)break;
vis[i * prime[j]] = true;
if(i % prime[j] == )break;
}
}
for(int i = ;i <= cnt;i++)
for(int j = prime[i];j <= N;j += prime[i])
{
t[j].push_back(make_pair(prime[i],j / prime[i]));
}
}
void updata(int &k,int L,int l,int r,int d)
{
if(!k){k = ++p;lc[k] = rc[k] = s[k] = ;}
s[k] += d;
if(l == r)return;
int mid = l + r >> ;
if(L <= mid)updata(lc[k],L,l,mid,d);
else updata(rc[k],L,mid + ,r,d);
}
int Query(int &k,int L,int R,int l,int r)
{
if(!k)return ;
if(L <= l && r <= R)return s[k];
int mid = l + r >> ;
if(L > mid)return Query(rc[k],L,R,mid + ,r);
if(R <= mid)return Query(lc[k],L,R,l,mid);
return Query(lc[k],L,R,l,mid) + Query(rc[k],L,R,mid + ,r);
}
int n,m;
int main()
{
shai();int Case;
scanf("%d",&Case);
while(Case--)
{
memset(root,,sizeof root);p = ;
scanf("%d %d",&n,&m);
for(int i = ;i <= n;i++)
{
scanf("%d",&a[i]);
for(int j = ;j < (int)t[a[i]].size();j++)
updata(root[t[a[i]][j].first],i,,n,t[a[i]][j].second);
}
int x,y,z;
while(m--)
{
scanf("%d %d %d",&x,&y,&z);bool f = true;
for(int j = ;j < (int)t[z].size();j++)
if(Query(root[t[z][j].first],x,y,,n) < t[z][j].second){f = false;break;}
if(f)puts("Yes");else puts("No");
}
}
}

[Bzoj5358][Lydsy1805月赛]口算训练(预处理+动态开点线段树)的更多相关文章

  1. [Lydsy1805月赛]口算训练 BZOJ5358

    分析: 没想到这道题还能二分查找... 这题主席树的话,裸的很显然...我们将每一个数分解质因数,之后建一个可持久化权值线段树维护[L,R]区间内的每一种质因子的个数,分解质因数的话,可以选择用线筛, ...

  2. NOIP2017 列队——动态开点线段树

    Description: Sylvia 是一个热爱学习的女♂孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有n×m名学生,方阵的行数为  ...

  3. Codeforces 803G Periodic RMQ Problem ST表+动态开节点线段树

    思路: (我也不知道这是不是正解) ST表预处理出来原数列的两点之间的min 再搞一个动态开节点线段树 节点记录ans 和标记 lazy=-1 当前节点的ans可用  lazy=0 没被覆盖过 els ...

  4. Luogu P3960 列队(动态开点线段树)

    P3960 列队 题意 题目描述 Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia所在的方阵中有\(n \times m ...

  5. NFLSOJ #917 -「lych_cys模拟题2018」橘子树(树剖+ODT+莫反统计贡献的思想+动态开点线段树)

    题面传送门 sb 出题人不在题面里写 \(b_i=0\) 导致我挂成零蛋/fn/fn 首先考虑树链剖分将路径问题转化为序列上的问题,因此下文中简称"位置 \(i\)"表示 DFS ...

  6. [2016湖南长沙培训Day4][前鬼后鬼的守护 chen] (动态开点线段树+中位数 or 动规 or 贪心+堆优化)

    题目大意 给定一个长度为n的正整数序列,令修改一个数的代价为修改前后两个数的绝对值之差,求用最小代价将序列转换为不减序列. 其中,n满足小于500000,序列中的正整数小于10^9 题解(引自mzx神 ...

  7. [bzoj 3531][SDOI2014]旅行(树链剖分+动态开点线段树)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3531 分析: 对于每个颜色(颜色<=10^5)都建立一颗线段树 什么!那么不是M ...

  8. 【BZOJ-4636】蒟蒻的数列 动态开点线段树 ||(离散化) + 标记永久化

    4636: 蒟蒻的数列 Time Limit: 30 Sec  Memory Limit: 256 MBSubmit: 247  Solved: 113[Submit][Status][Discuss ...

  9. codeforces 893F - Physical Education Lessons 动态开点线段树合并

    https://codeforces.com/contest/893/problem/F 题意: 给一个有根树, 多次查询,每次查询对于$x$i点的子树中,距离$x$小于等于$k$的所有点中权值最小的 ...

随机推荐

  1. 使用 Python 编写登陆接口

    # 使用 Python 编写登陆接口# Create Date: 2017.10.31 Tuesday# Author: Eric Zhao# -*- coding:utf-8 -*-'''编写登陆接 ...

  2. Cinder配置多Ceph后端步骤

    1. 检查cinder当前backend配置 使用cinder service-list,查看cinder-volume服务的Host字段格式. 旧版格式: 新版格式: 旧版中Host字段是cinde ...

  3. jmeter中重要组件及其执行顺序

    jmeter中重要组件有:Sampler,计时器,前置处理器和后置处理器,断言,Controller,Listener和配置原件. 同类组件之间是从上到下的顺序执行,不同组件之间是按照以下的顺序执行的 ...

  4. HDU 4871 Shortest-path tree 最短路 + 树分治

    题意: 输入一个带权的无向连通图 定义以顶点\(u\)为根的最短路生成树为: 树上任何点\(v\)到\(u\)的距离都是原图最短的,如果有多条最短路,取字典序最小的那条. 然后询问生成树上恰好包含\( ...

  5. 03008_ServletContext

    1.什么是ServletContext? (1)ServletContext代表是一个web应用的环境(上下文)对象,ServletContext对象    内部封装是该web应用的信息,Servle ...

  6. JAVA 消耗 CPU过高排查方法

    #找出cpu占用最高的进程top -H#再次确定进程ps aux|grep 17408 #查看进程的线程(tid) ps -mp 17408 -o THREAD,tid,time#将线程转换为十六进制 ...

  7. XeLaTeX插入GB/T 7714-2005规范的参考文献方法

        GB/T 7714-2005 biblatex 在使用XeLaTeX的过程中,会遇到参考文献需要按照GB/T 7714-2005规范的情况.此时需要使用biblatex宏包,并且指定包的参数为 ...

  8. [转]zsh快捷键记录

    转自: http://wdxtub.com/2016/02/18/oh-my-zsh/ 使用技巧 连按两次Tab会列出所有的补全列表并直接开始选择,补全项可以使用 ctrl+n/p/f/b上下左右切换 ...

  9. 【转】深入JVM系列(一)之内存模型与内存分配

    http://lovnet.iteye.com/blog/1825324 一.JVM内存区域划分   大多数 JVM 将内存区域划分为 Method Area(Non-Heap),Heap,Progr ...

  10. HDU——1982Kaitou Kid - The Phantom Thief (1)(坑爹string题)

    Kaitou Kid - The Phantom Thief (1) Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/327 ...