首页 > 其他分享 >离线树状数组例题

离线树状数组例题

时间:2022-08-22 10:34:17浏览次数:56  
标签:树状 int LL 离线 ask 例题 define

https://codeforces.ml/contest/1712/problem/E2

题解:

https://www.bilibili.com/video/BV1uB4y167ig?spm_id_from=333.1007.top_right_bar_window_view_later.content.click&vd_source=75ae018f8d1181302d7ea76b60c928f4

主要思路为:“”离线“”计算k取1-r时的树状数组:记录i取1-r时的数量,然后对r的ask减去当前合法的数量(树状数组l~(r-2))

代码:

#include<bits/stdc++.h>

#define fore(x,y,z) for(LL x=(y);x<=(z);x++)
#define forn(x,y,z) for(LL x=(y);x<(z);x++)
#define rofe(x,y,z) for(LL x=(y);x>=(z);x--)
#define rofn(x,y,z) for(LL x=(y);x>(z);x--)
#define all(x) (x).begin(),(x).end()
#define fi first
#define se second

using namespace std;
typedef long long LL;
typedef pair<int, int> PII;
typedef pair<LL, LL> PLL;

vector<int> factor[400100];
vector<PII> ask[200010];
LL ans[100010];
LL tr[200010];


int lowbit(int x)
{
    return x & (-x);
}
int add(int x, int c)
{
    for (int i = x; i <= 200000; i += lowbit(i))
    {
        tr[i] += c;
    }
    return 0;

}
LL sum(int x)
{
    LL res = 0;
    for (int i = x; i > 0; i -= lowbit(i))
        res += tr[i];
    return res;

}
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    for (int i = 1; i <= 200010; i++)
    {
        for (int j = i; j <= 400020; j += i)
            factor[j].push_back(i);
    }
    int T = 1;
    cin >> T;
    int a, b;
    for(int i=1;i<=T;i++)
    {
        cin >> a >> b;
        ask[b].push_back({ a,i });
        LL x = b - a + 1;
        ans[i] = x * (x - 1)*(x - 2) / 6;

    }
    for (int k = 1; k <= 200000; k++)
    {
        for (auto i : factor[2 * k])
        {
            if (i == k)
                break;
            int cnt = 0;
            for (auto j : factor[2 * k])
            {
                if (j == k)
                    break;
                if (j <= i)
                    continue;
                if (k%j == 0 && k%i == 0)
                    cnt++;
                else if (i + j > k)
                    cnt++;

            }
            add(i, cnt);
        }
        for (auto[l, i] : ask[k])
        {
            ans[i] -= sum(k - 2) - sum(l - 1);
        }
    }
    for (int i = 1; i <= T; i++)
    {
        cout << ans[i] << endl;
    }
    return 0;
}
View Code

 

标签:树状,int,LL,离线,ask,例题,define
From: https://www.cnblogs.com/ydUESTC/p/16611969.html

相关文章

  • yum离线安装rpm和依赖包
    离线安装说明      通常生产环境由于安全原因都无法访问互联网.此时就需要进行离线安装,主要有两种方式:源码编译、rpm包安装。源码编译耗费时间长且缺乏编译环......
  • 传球游戏【NOIP2018普及组T3】(ybtoj 递推例题2)
    题目描述上体育课的时候,小蛮的老师经常带着同学们一起做游戏。这次,老师带着同学们一起做传球游戏。游戏规则是这样的: 个同学站成一个圆圈,其中的一个同学手里拿着一......
  • 树形dp例题 + 学习笔记(入门版)
    树形dp,即在树上进行dp。需要对树这一数据结构有清晰的了解。其中重点在于树的遍历、子树相关问题。难点常常在于状态方程的书写。例题一、没有上司的舞会题意树上每......
  • 【DS】浅谈树状数组倍增
    无意中看到的一个小trick,便记录下来。引入给您一个数组,您需要实现以下操作和询问:\(\bullet\)插入一个数字\(x\)。\(\bullet\)查询排名为\(k\)的数\(x\)。......
  • 离线安装Ansible
    背景:当我们Linux机器的环境没办法链接外网时可以使用离线安装的方式进行。前提:python环境一、离线包安装setuptools模块安装https://pypi.python.org/packages/source/......
  • 离线安装文件
    PIP3#所有依赖库导成txtpip3freeze>requirements.txt#下载依赖到packages文件夹下download-dpackages-rrequirements.txt--trusted-hostmirrors.cloud.ali......
  • 离线(无网)安装、运行arthas工具的方法
    如何在没有网的主机或者容器中,安装arthas工具? 之前的arthas,在启动的时候,都要下载一些依赖的库,必须要联网。现在,使用最新的全的arthas的包,就解决了这个问题。 接下来......
  • 技术专家说 | 如何基于 Spark 和 Z-Order 实现企业级离线数仓降本提效?
    【点击了解更多大数据知识】市场的变幻,政策的完善,技术的革新……种种因素让我们面对太多的挑战,这仍需我们不断探索、克服。今年,网易数帆将持续推出新栏目「金融专家说」......
  • EasyCVR开启集群后,无法添加/删除离线节点的设备该如何解决?
    EasyCVR的集群功能自发布后,越来越多的用户也开始逐渐部署集群服务,并应用在各种实际场景中。对于EasyCVR的服务器集群功能,我们也在不断对细节进行优化和功能拓展,欢迎大家持......
  • EasyCVR切换为新版本时设备全部离线,用户应该如何正确配置MySQL数据库?
    关于TSINGSEE青犀视频平台数据库切换的操作步骤、迁移数据时遇到的异常等相关技术类文章,我们在博文中分享过很多,感兴趣的用户可以翻阅我们的往期文章进行了解。TSINGSEE青......