首页 > 其他分享 >F. Remainder Problem 根号分治

F. Remainder Problem 根号分治

时间:2023-09-11 20:34:10浏览次数:35  
标签:idx int sqrt 操作 500000 Problem Remainder 根号

Problem - F - Codeforces

 题意:一个500000长度的数列,一开始都是0,进行q次操作,操作如下

  1,输入x,y,令a[x]+=y。

  2,输入x,y,输出对于sum(a[idx]),idx的条件是idx=x%y。

做法:如果我们模拟做,那么第一种操作就是o(1),第二种操作就是o(n)。

我们换种想法, 建立一个二维数组 b[x][y],表示对于idx%x=y的a[idx]的sum,这种做法下,第一种的操作是o(n),第二种操作是o(1)。

我们考虑融合两种想法,取二者之长。于是我们的做法就出炉了:

  对于小于等于sqrt(500000)的而言,我们采用第二种操作,其复杂度为sqrt(500000)。

  对于大于sqrt(500000)的而言,我们采用第一种操作,其复杂度同样最大为sqrt(500000);

 

void solve(){
    int q;cin>>q;
    vector<int>a(500010);
    int m=sqrt(500000);
    vector<vector<int>>b(m+1);//b[x][y]  modx=y;
    for(int i=1;i<=m;i++)b[i].resize(i);
    while(q--){
        int op;cin>>op;
        if(op==1){
            int x,y;cin>>x>>y;
                for(int i=1;i<=m;i++)b[i][x%i]+=y;
                a[x]+=y;
        }
        else{
            int x,y;cin>>x>>y;
            if(x<=m)cout<<b[x][y]<<"\n";
            else{
                int sum=0;
                for(int i=y;i<=500000;i+=x)sum+=a[i];
                    cout<<sum<<"\n";
            }
        }
    }
}

 

标签:idx,int,sqrt,操作,500000,Problem,Remainder,根号
From: https://www.cnblogs.com/shi5/p/17694437.html

相关文章

  • Paper Reading: Hashing-Based Undersampling Ensemble for Imbalanced Pattern Class
    目录研究动机文章贡献本文方法整体流程基于哈希的子空间划分方法基于距离的样本选择实验结果数据集和实验设置不同子空间划分方法的影响不同加权方案的抽样与其他方法比较优点和创新点PaperReading是从个人角度进行的一些总结分享,受到个人关注点的侧重和实力所限,可能有理解不到......
  • 【230908-16】▲ABC中,a=2,c=二倍根号2,C=45°,则S△ABC=?
    ......
  • [RxJS] "Animation Allowed" problem
    consttasks=of([....]);/***{*...{...4......5......2}*...........{3...........2...5}*..................................{6....3}*..........................................{3..4....2}*}**/constanimationAllowed=t......
  • 力扣——1 [两数之和](https://leetcode.cn/problems/two-sum/)
    给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例1:输入:nums=[2,7,11,15],tar......
  • 根号分治
    块状思想自学目录块状思想自学一些定义:引入为什么要有分块思想?A.分块思想:例题引入:思路引导ac代码:一些总结:一些小练习:(题解晚点写出来)一些定义:分块的基本思想是,通过对原数据的适当划分,并在划分后的每一个块上预处理部分信息,从而较一般的暴力算法取得更优的时间复杂度。分块的时......
  • 2023.9.3 hpz's problems about trees
    P2664树上游戏对于颜色\(c\),如果我们把颜色\(c\)的点全部都删除,那么我们会得到若干个连通块。连通块里面的路径是没有贡献的,连通块联通外面的路径都会有这个颜色做了贡献。对于一个连通块,其里面所有点都能有\(n-siz(连通块)\)的贡献。如果我们每次枚举颜色,再计算连通块,......
  • [ABC318G] Typical Path Problem 题解
    题意给定一个\(N\)个节点和\(M\)条边组成的简单无向联通图,给定三个节点\(A,B,C\),求是否存在一条简单路径满足\(A\rightarrowB\rightarrowC\)。(\(3\leN,M\le2\times10^5\))。题解因为简单路径要求每个节点至多经过一次,故不存在合法的简单路径当且仅当存在一个......
  • 【230903-1】锐角▲ABC中,b=4,c=6,aSinB=二倍根号3,D为BC中点,则AD=?
    ......
  • ABC318G Typical Path Problem
    给定无向连通图,问是否存在一条从\(A\)到\(C\)经过\(B\)的简单路径。\(n\le3\times10^5\)。怎么这个G这么简单我还没写完啊?怎么这个G这么简单我还没写完啊?怎么这个G这么简单我还没写完啊?怎么这个G这么简单我还没写完啊?怎么这个G这么简单我还没写完啊?怎么这......
  • 【230902-1】如图,▲ABC为等腰直角三角形,A为直角,腰长2倍根号2;D为斜边BC中点,E为直角边AC
    【230902-1】如图,▲ABC为等腰直角三角形,A为直角,腰长2倍根号2;D为斜边BC中点,E为直角边AC中点;F为AD上动点,GE垂直EF,GE=EF;H为BC边上动点,连接HE,B‘是B关于HE的轴对称点。求:B’G的最小值?......