首页 > 其他分享 >D. A BIT of an Inequality

D. A BIT of an Inequality

时间:2024-05-04 21:12:24浏览次数:15  
标签:gt cntright cntleft ll 100005 add Inequality BIT

原题链接

题解

1.如果 \(x \oplus y \gt x\) ,则 \(y\) 的最高位对应的 \(x\) 一定是 \(0\)
2.$f(x,y)\oplus f(y,z) \gt f(x,z) $ 等价于 \(f(x,z) \oplus a_y \gt f(x,z)\)
3.\(x \in [1,y]\) 则 \(x-1 \in [0,y-1]\)

code

#include<bits/stdc++.h>
using namespace std;

#define ll long long

ll a[100005]={0}, pre[100005]={0};
ll cntleft[100005][35][2]={0}, cntright[100005][35][2]={0};

inline void read(ll &x) {
	x = 0;
	ll flag = 1;
	char c = getchar();
    while(c < '0' || c > '9'){
        if(c == '-')flag = -1;
        c = getchar();
    }
	while(c >= '0' && c <= '9') {
		x = (x << 3) + (x << 1) + (c ^ 48);
		c = getchar();
	}
	x *= flag;
}

inline void write(ll x)
{
    if(x < 0){
    	putchar('-');
		x = -x;
	}
    if(x > 9)
		write(x / 10);
    putchar(x % 10 + '0');
}

int main()
{
    ll t;
    read(t);
    while(t--)
    {
        ll n;
        read(n);
        for(ll i=1; i<=n; i++)
        {
            read(a[i]);
            pre[i]=pre[i-1]^a[i];
        }

        for(ll k=0; k<=30; k++) cntleft[0][k][0]=1;
        for(ll i=1; i<=n; i++)
        {
            for(ll k=0; k<=30; k++)
            {
                ll add=((pre[i]>>k)&1);
                cntleft[i][k][add]=cntleft[i-1][k][add]+1;
                cntleft[i][k][1-add]=cntleft[i-1][k][1-add];
            }
        }

        for(ll k=0; k<=30; k++) cntright[n+1][k][1]=cntright[n+1][k][0]=0;
        for(ll i=n; i>=1; i--)
        {
            for(ll k=0; k<=30; k++)
            {
                ll add=((pre[i]>>k)&1);
                cntright[i][k][add]=cntright[i+1][k][add]+1;
                cntright[i][k][1-add]=cntright[i+1][k][1-add];
            }
        }

        ll ans=0;
        for(ll i=1; i<=n; i++)
        {
            ll height=log2(a[i]);
            ans+=cntleft[i-1][height][0]*cntright[i][height][0];
            ans+=cntleft[i-1][height][1]*cntright[i][height][1];
        }
        write(ans);
        putchar('\n');
    }
    return 0;
}

标签:gt,cntright,cntleft,ll,100005,add,Inequality,BIT
From: https://www.cnblogs.com/pure4knowledge/p/18172696

相关文章

  • RabbitMQ的基本使用
    在数据采集的过程中,可能需要一些进程间的通信,如一个进程负责构造爬取请求,另一个负责执行这些请求;某个数据爬取进程执行完毕,通知另一个负责数据处理的进程开始爬取数据;某个进程新建了一个爬取任务,通知另一个负责数据爬取的进程开始爬取数据。为了降低进程耦合度,需一个消息......
  • BiTCN:基于卷积网络的多元时间序列预测
    在时间序列预测领域中,模型的体系结构通常依赖于多层感知器(MLP)或Transformer体系结构。基于mlp的模型,如N-HiTS,TiDE和TSMixer,可以在保持快速训练的同时获得非常好的预测性能。基于Transformer的模型,如PatchTST和ittransformer也取得了很好的性能,但需要更多的内存和时间来训练。......
  • rabbitMQ
    同步调用的优点:时效性强,等待到结果后才会返回  缺点:拓展性差,性能下降,级联失败问题异步调用的优点:接触耦合,增强拓展性;无需等待,性能好;故障隔离;缓存消息,流量削峰填谷缺点:时效性差,不确定是否成功,业务安全依赖于broker的可靠性 rabbitMQ整体架构:virtua......
  • 轻松使用Aspire rabbitmq framework
    轻松使用aspirerabbitmq创作初衷aspire是微软基金会推出的新一代云原生编排框架,具体请看https://learn.microsoft.com/en-us/dotnet/aspire/get-started/aspire-overview我从preview1-preview6(目前最新2024/5/1)一直都有使用,在第一版的时候我就用它放入了我的一个微服务......
  • Stegsolve有bug: 只支持32/24bit真彩色, 解析灰度图像有问题(附排查过程)
    结论:如题目所示。切勿直接相信它对灰度图像的解析 发现过程:在给学生排查毕设代码的时候,发现明明只改了0-3四个位平面,但用Stegsolve观察的时候发现连红色通道的6号位平面都出现相似的条纹了。排查的过程:首先怀疑代码哪里写错,毕竟 Stegsolve是个用得挺多的工具,......
  • CI/CD构建部署流程(bitbucket部分)
    一、目前环境:lab二、进入bitbucket的pipeline页面 三、查看CI构建流程详细信息 四、进入devops-pipeline-cd项目https://bitbucket.org/miktechnology/devops-pipeline-cd/pipelines/results/page/1Can'tfindlink,查看CD部署日志 五、验证CI/CD构建部署流程是否成......
  • HDLBits练习:Countbcd
    目录题目代码解法一解法二解法三题目题目链接:Countbcd题目让写一个四位的BCD计数器,可以等价看成0000~9999的计数器,进位规则和我们日常的十进制计数一样。代码解法一通过例化或者修改一位的十进制计数器实现有关ena信号的处理部分,其实是与clk信号无关的;但是,也可以根据clk......
  • RabbitMQ docker集群 多机器部署
    参考参考https://blog.csdn.net/m0_47214030/article/details/131358298 ipporthostname192.168.2.2016041node1192.168.2.2026041node2192.168.2.2036041node31、启动三个RabbitMQ容器 新版本已经不建议通过环境变......
  • rabbitmq
    一消息队列介绍1.1介绍消息队列就是基础数据结构中的“先进先出”的一种数据机构。想一下,生活中买东西,需要排队,先排的人先买消费,就是典型的“先进先出”1.2MQ解决什么问题MQ是一直存在,不过随着微服务架构的流行,成了解决微服务之间问题的常用工具。应用解耦以电商应用为例......
  • 二的幂次方判断——使用位运算-来源于lowbit操作
     解法:位运算的使用这里需要就是了解位运算的使用了lowbit函数x&-x这种算法其实是利用了计算机的补码性质。计算机为了表示负数,将对应的正数二进制全部取反再加一。lowbit是为了获取一个数的二进制中最低位的1对应的值,比如lowbit(10(10))=10(2),因为10的二进制表达是1010。......