首页 > 其他分享 >ABC 288 D - Range Add Query

ABC 288 D - Range Add Query

时间:2024-04-27 20:11:25浏览次数:27  
标签:std 取模 ABC 下标 前缀 int cin 288 Range

题目链接:

设 \(a[i]\) 表示下标对 \(k\) 取模为 \(i\) 的所有数的和。那每次操作就是将数组 \(a\) 的所有数都加 \(c\)。最终为 \(0\) 的充分必要条件就是 \(a\) 的所有数都是一样的。

因此,对于每组询问,统计 \([l,r]\) 中数字下标对 \(k\) 取模的所有数的和,看看是否为同一个数即可。也即判断下标 \(i\) % \(k\) 的 \(k\) 个前缀和是否相同。预处理原数组的下标取模前缀和,每组询问就两个前缀和相减就得到该区间的下标取模前缀和

#include <bits/stdc++.h>

using i64 = long long;

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    
    int n, k;
    std::cin >> n >> k;
    
    std::vector<int> a(n);
    std::vector<i64> s(n);
    for (int i = 0; i < n; i++) {
        std::cin >> a[i];
        s[i] = a[i];
        if (i >= k) {
            s[i] += s[i - k];
        }
    }
    
    int q;
    std::cin >> q;
    
    while (q--) {
        int l, r;
        std::cin >> l >> r;
        l--, r--;
        
        std::vector<i64> b(k);
        for (int i = r; r - i + 1 <= k; i--) {
            b[i % k] += s[i];
        }
        for (int i = l - 1; i >= 0 && l - i <= k; i--) {
            b[i % k] -= s[i];
        }
        std::vector<i64> c(k, b[0]);
        if (b == c) {
            std::cout << "Yes\n";
        } else {
            std::cout << "No\n";
        }
    }
    
    return 0;
}

标签:std,取模,ABC,下标,前缀,int,cin,288,Range
From: https://www.cnblogs.com/pangyou3s/p/18162446

相关文章

  • ABC347B Substring
    题目描述给你一个由小写英文字母组成的字符串S,S有多少个不同的非空子串?子串是连续的子序列。例如,xxx是yxxxy的子串,但不是xxyxx的子串。数据范围:S是长度在1和100之间(含)的字符串,由小写英文字母组成。题解我认为这道题放在普及组的话,非常适合放在第一题和第二题之间,......
  • HIVE SQL 聚合函数与 rows between / range between详解
    HIVESQL聚合函数与rowsbetween/rangebetween详解名词解释unbounded:无边界preceding:根据排序后的结果集选定的当前数据行往前following:根据排序后的结果集选定的当前数据行往后unboundedpreceding:根据排序后的结果集选定的当前数据行往前,即到初始行结束npreceding:往......
  • Dynamics 365 F&O and firewalls - monitor Azure IP ranges
    Contents  hide 1 AzureIPRanges:canwemonitorthem?2 Myproposal:anAzurefunction2.1 Authentication2.2 Thefunction2.3 Environmentvariables2.4 HTTPcall2.5 Functionresponse3 Usingthefunction4 Let’stestit!4.1 Subsc......
  • ABC 350
    VP的。猜猜为啥没有penalty?因为T的没有测完。submissionsA,B直接暴力。C一个很简单的方法就是第\(i\)次把\(i\)放到应该在的位置。当然如果原先就在了就别管。D一个联通图中的每两个点都能成为朋友。因此直接dsu。E记忆化搜索。注意到如果投骰子投到\(1\),直接......
  • ABC350 E - Toward 0 题解
    AtCoderBeginnerContest350E-Toward0原题地址题意给定四个数NAXY,你可以对N进行以下两种操作。花费X的代价将N变成\(\lfloor\cfrac{N}{A}\rfloor\)花费Y的代价掷一颗骰子,设掷出结果是i,将N变成\(\lfloor\cfrac{N}{i}\rfloor\)你需要执行若干次......
  • P2882 题解
    思想一眼看上去,没什么思路。看一下标签。枚举!于是枚举\(K\)。然后变成了求最少次数。由于枚举放在第一个,我们还是考虑一下枚举。我们枚举反转区间的左端点,我们惊奇地发现,由于从左往右扫,如果左端点是朝后的,那这次不转就没机会了。所以最最简单的暴力:从左往右扫,遇到左端点......
  • [ABC343G] Compress Strings
    题目链接:https://www.luogu.com.cn/problem/AT_abc343_gsolution:1.首先我们将给出的字符串中互相包含的消去,可以使用kmp求前后缀来完成。和这道题的写法一样https://www.luogu.com.cn/problem/CF1200E2.我们发现给出的字符串最多只有20个,考虑状压来求解所有可能3.我们注意到这......
  • abc340E题解
    题目描述样例input:5312345240output:04272算法1(树状数组)$O(nlogn)$本题我们可以看作对于每一个查询位置x我们都需要先把该位置上的所有球拿出来,然后再一个一个的放到对应位置上去。假设x位置上面有y个球,那么对于这y个球,如果大于n,那么就对所有的位置放y......
  • [ABC329C] Count xxx 题解
    [ABC329C]Countxxx题解题目分析目的:统计本质不同而不是位置不同的所有字符都相同的字串。需要理解一下什么是本质不同而不是位置不同。结合样例1去理解这句话。列举样例1中的所有所有组成字符相同的字串。aaabaa编号字串位置\(1\)a\([1,1]\)\(2\)aa\([1......
  • (图论分析,思维)ABC 350-D
    背景:我自己思考想出来的图论题,总归是有成就感的分析:求间接连接的点的对数,即一个连通块中枚举出两两连接的组合数,减去整个连通块中的边数,因为一条边必然直接连接了两个不同的点原理:并查集时间复杂度:o(n)代码如下:点击查看代码#include<bits/stdc++.h>usingnamesp......