首页 > 其他分享 >P5629 【AFOI-19】区间与除法 题解

P5629 【AFOI-19】区间与除法 题解

时间:2023-08-28 10:44:36浏览次数:49  
标签:include 19 题解 AFOI 原数 int 消灭 除法

P5629 【AFOI-19】区间与除法 题解

由于题目中的运算是除法,所以对于一个数字 \(x\),最多运算次数不会超过 \(\lceil\log_{d}x\rceil\) 就会变成 \(0\)。

然后我们就可以在 \(O(n\log C)\) 的时间复杂度内算出来每一个数字能被哪些原数消灭。

这样处理询问仍然棘手,接下来有一个性质:

如果原数 \(a\) 可以被操作为原数 \(b\),那么所有能被 \(a\) 消灭的数字都可以被 \(b\) 消灭。

证明显然,如果数字 \(x\) 能被 \(a\) 消灭,那么它一定会在某一个时刻变成 \(a\),而 \(a\) 可以被 \(b\) 消灭,所以 \(x\) 变成 \(a\) 后可以被 \(b\) 消灭。

所以可以把原数全部去重然后只保留不会被其它原数消灭的原数。

这样每一个序列中的数 \(a_i\) 最多对应一个原数可以把它消灭。

对于没法消灭的 \(a_i\) 不用管,询问就变成了区间不同数字的个数,由于 \(m\le 60\),可以暴力枚举每一个原数判断是否存在于区间内,这个用前缀和实现即可。

时间复杂度:\(O(n\log C+nm+qm)\)。

// Problem: P5629 【AFOI-19】区间与除法
// Author: Moyou
// Copyright (c) 2023 Moyou All rights reserved.
// Date: 2023-08-28 09:58:44

#include <algorithm>
#include <cstring>
#include <iostream>
#include <unordered_map>
#define int long long
using namespace std;
const int N = 5e5 + 10, M = 70;
int n, m, d, q, a[N], b[N], idx, temp[N], tot;
unsigned s[N][M];
unordered_map<int, bool> h;
int find(int x) {
    return lower_bound(b + 1, b + idx + 1, x) - b;
}

signed main()
{
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    cin >> n >> m >> d >> q;
    for(int i = 1; i <= n; i ++) cin >> a[i];
    for(int i = 1; i <= m; i ++) cin >> b[i];
    sort(b + 1, b + m + 1);
    tot = unique(b + 1, b + m + 1) - b - 1;
    for(int i = 1; i <= tot; i ++) {
        int t = b[i];
        while(t) {
            if(h.count(t)) {
                b[i] = -1;
                break;
            }
            t /= d;
        }
        if(~b[i]) h[b[i]] = 1;
    }
    swap(temp, b);
    for(int i = 1; i <= tot; i ++)
        if(~temp[i]) b[++ idx] = temp[i];
    for(int i = 1; i <= n; i ++) {
        int t = a[i];
        a[i] = -1;
        while(t) {
            if(h.count(t)) {
                a[i] = t;
                break;
            }
            t /= d;
        }
    }
    for(int i = 1; i <= n; i ++) {
        memcpy(s[i], s[i - 1], sizeof s[i - 1]);
        if(~a[i]) s[i][find(a[i])] ++;
    }
    for(int i = 1, l, r, ans = 0; i <= q; i ++, ans = 0) {
        cin >> l >> r;
        for(int j = 1; j <= idx; j ++) 
            if(s[r][j] - s[l - 1][j]) ans ++;
        cout << ans << '\n';
    }
    return 0;
}

标签:include,19,题解,AFOI,原数,int,消灭,除法
From: https://www.cnblogs.com/MoyouSayuki/p/17661653.html

相关文章

  • SpringMVC3的ResponseBody返回字符串乱码问题解决
    SpringMVC的@ResponseBody注解可以将请求方法返回的对象直接转换成JSON对象,但是当返回值是String的时候,中文会乱码 原因是因为其中字符串转换和对象转换用的是两个转换器,而String的转换器中固定了转换编码为"ISO-8859-1" 网上也很多种解决方法,有通过配置Bean编码的,也有自己重写转......
  • 数位dp部分题解
    前言最近学了一种新的数位dp的状态表示,打算应用到以前做过的数位dp的题目。如果我们对数$N$进行数位dp,以前的状态定义$f(i,j)$表示所有数位大小为$i$且最高位是数字$j$的数的个数,如果还有其他约束条件那么再补充相应的状态即可。而新的状态定义则是$f(i,1)$和$f(i,0)$,其中$f(......
  • 销售基因链 题解
    销售基因链题目大意给定\(n\)个字符串,长度总和为\(m\),进行\(q\)次询问,每次询问给定两个字符串\(p,s\),问所有的字符串中以\(p\)为前缀且以\(s\)为后缀的有多少个。思路分析分享一个船新的答辩做法。(目前是最劣解)考虑哈希,对每个给定的字符串前后各做一遍哈希,将所有的......
  • P2486 [SDOI2011] 染色 题解
    P2486[SDOI2011]染色神仙树剖题。题意给你一棵树,每个点都有颜色,支持下面两种操作:路径染色。路径颜色段数量查询。树剖部分我们看到树上问题,不好处理,所以想办法给他树剖搞一搞,给他转化成序列的操作。我们树剖就是正常的树剖,然后我们考虑如何维护这个颜色序列。我......
  • Educational Codeforces Round 119
    今天只有3题,有点遗憾,D题几乎一眼切,但是时间不够,分类讨论没写完,vp结束几分钟后写出来。A题开始还以为要并查集,后面发现只有一个N不行B题漏写括号WA一发C题感觉不好写啊,因为直接计算可能会爆,所以要先从后往前,确定边界,然后就是跟普通的填数差不多,二分一下。又是找串,还得特别小心......
  • P9585 酒店题解
    分析:贪心算法。有\(n\)个客人。对于每一位客人,我们都要遍历一遍所有房间,找出最优入住房间编号。设当前遍历的房间编号为\(j\)。分三种情况:左右两边的房间皆空,则为最优房间。左右两边只有一个房间有客人,则愤怒值加\(2\)(因为有两个客人所以加\(2\))。左右两边都有人住,则......
  • ABC317F题解
    让人头大的数位DP。建议评蓝。个人认为不适合放ABC的F。将三个数二进制拆分,使三个数异或为0相当于每个二进制位三个数中有0或2个是1。所以考虑数位DP,设\(dp[i][m1][m2][m3][lim1][lim2][lim3]\)为第\(i\)位,三个数模\(a\),\(b\),\(c\)分别是\(m1\),\(m2\),\(m3\)......
  • 19 迭代器模式 -- go语言设计模式
    迭代器模式是一种行为型设计模式,它允许我们在不暴露聚合对象内部结构的情况下,遍历其中的元素。在这种模式下,我们使用迭代器对象来遍历聚合对象中的元素。迭代器模式的实现代码packagemainimport("fmt")//定义一个迭代器接口typeIteratorinterface{HasNext......
  • [极客大挑战 2019]PHP
    [极客大挑战2019]PHP打开链接,提示有备份网站的习惯![image-20230821164500785](../../../../../../Typora文章/[极客大挑战2019]PHP/image-20230821164500785.png)因此此时尝试访问一些常见的网站备份文件名,例如:常见网站源码备份文件后缀:tar.gz zip rar tar常见网站源......
  • NC19857 最后的晚餐(dinner)
    题目链接题目题目描述​**YZ(已被和谐)的食堂实在是太挤辣!所以Apojacsleam现在想邀请他的一些好友去校外吃一顿饭,并在某酒店包下了一桌饭。​当Apojacsleam和他的同学们来到酒店之后,他才发现了这些同学们其实是N对cp,由于要保护广大单身狗的弱小心灵(FF!),所以他不想让任意一......