首页 > 其他分享 >「CF959F」 Mahmoud and Ehab and yet another xor task

「CF959F」 Mahmoud and Ehab and yet another xor task

时间:2024-12-20 15:44:42浏览次数:4  
标签:task xor ll lst Mahmoud 线性 return 复杂度 dis

题意

给定 \(n\) 个整数 \(a_i\) 和 \(q\) 次形如 \(l\ x\) 的提问,每次提问输出 \(a_1\sim a_l\) 中有多少个子序列满足异或和为 \(x\)。

分析

很明显的线性基,因为数组开 \(20n\) 不会炸,所以可以直接建立 \(n\) 个线性基,记录 \(a_1\sim a_i\) 的线性基。

但是注意时间,因为下一位的线性基可以直接继承上一位的,所以在求解线性基时可加入 *this=lst,其中 \(lst\) 表示上一位的线性基,把时间复杂度降到 \(O(n)\)。

询问复杂度为 \(O(q\log n)\),总时间复杂度为 \(O(q\log n)\)。

Code

#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
inline ll read(){ll x=0,f=1;char c=getchar();while(c<48||c>57){if(c==45)f=0;c=getchar();}while(c>47&&c<58)x=(x<<3)+(x<<1)+(c^48),c=getchar();return f?x:-x;}
const ll mod=1e9+7,maxn=1e5+5,maxj=25;
struct basis{
    ll p[maxj];
    inline ll highbit(ll x){ll res=0;while(x)++res,x>>=1;return res;}
    inline void ins(basis lst,ll x){*this=lst;while(x){ll dis=highbit(x);if(p[dis])x^=p[dis];else return p[dis]=x,void();}}
    inline ll size(){ll res=0;for(ll i=1;i<=maxj;++i)res+=p[i]!=0;return res;}
    inline ll sum(ll x){ll res=0;while(x){ll dis=highbit(x);if(p[dis])x^=p[dis],++res;else return -1;}return x?res:size();}
}base[maxn];//线性基模板
ll n,q,a[maxn];
inline ll qpow(ll a,ll b){
    ll res=1;
    while(b){
        if(b&1)res=res*a%mod;
        a=a*a%mod,b>>=1;
    }
    return res;
}
signed main(){
    n=read(),q=read();
    for(ll i=1;i<=n;++i)a[i]=read(),base[i].ins(base[i-1],a[i]);
    while(q--){
        ll l=read(),x=read();
        ll res=base[l].sum(x);
        printf("%lld\n",res==-1?0:qpow(2,l-res));
    }
    return 0;
}

标签:task,xor,ll,lst,Mahmoud,线性,return,复杂度,dis
From: https://www.cnblogs.com/run-away/p/18144003

相关文章

  • WPF GeometryCombineMode Exclue,Intersect,Union,Xor
      <Windowx:Class="WpfApp72.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.micro......
  • RK3568平台开发系列讲解(中断及异常篇)中断下半部:tasklet实验
    ......
  • HarmonyOS Next 并发 taskpool 和 worker
    HarmonyOSNext并发taskpool和worker总览介绍并发,指的是同一时间内,多段代码同时执行。在ArkTs编程中,并发分为异步并发和多线程并发。异步并发异步并发并不是真正的并发,比如在单核设备中,同时执行多端代码其实是通过CPU快速调度来实现的。比如一个司机,它在同一时间只......
  • 在 Windows 操作系统中,Runtime Broker 和 Background Task Host 是两种常见的进程和服
    在Windows操作系统中,RuntimeBroker和BackgroundTaskHost是两种常见的进程和服务,它们在后台运行并执行与系统和应用相关的一些任务。它们对于系统的正常运行非常重要,通常不需要用户干预。下面是它们的详细说明:1. RuntimeBroker是什么?RuntimeBroker是一个Windows系......
  • 使用任务队列TaskQueue和线程池ThreadPool技术实现自定义定时任务框架详解
    前言在桌面软件开发中,定时任务是一个常见的需求,比如定时清理日志、发送提醒邮件或执行数据备份等操作。在C#中有一个非常著名的定时任务处理库Hangfire,不过在我们深入了解Hangfire之前,我们可以手动开发一个定时任务案例,用以帮助我们理解Hangfire的核心原理。我们可以利用......
  • Paper Reading: Are you still on track!? Catching LLM Task Drift with Activations
    AbstractTask:DefenseLLMfrompromptinjectionattacksTool:TaskTrackerMethods:useactivationdeltas(thedifferenceinactivationsbeforeandafterprocessingexternaldata)withasimplelinearclassifierExperimentanout-of-distributiontests......
  • C# 中的 Task
    文章目录前言一、Task的基本概念二、创建Task使用异步方法使用Task.Run方法三、等待Task完成使用await关键字使用Task.Wait方法四、处理Task的异常使用try-catch块使用Task.Exception属性五、Task的延续使用ContinueWith方法使用await关键字和异......
  • failed to create shim task: OCI runtime create failed: unable to retrieve...runc
    1.问题描述在使用containerd作为容器运行时,以nerdctl为管理工具来启动容器时报错,容器无法启动failedtocreateshimtask:OCIruntimecreatefailed:unabletoretrieveOCIruntimeerror(open/run/containerd/io.containerd.runtime.v2.task/default/84726a190b6183......
  • DooTask:轻量级任务管理工具应用
    DooTask:轻量级任务管理工具应用引言在当今快节奏的工作环境中,团队协作变得愈发重要。你有没有想过,为什么一些团队总是能高效完成任务,而另一些团队却总是手忙脚乱?答案往往在于使用合适的工具。DooTask就是这样一个工具,它不仅仅是一个任务管理器,更是一个助力团队高效协作的......
  • 深入理解 Task.Delay 的定时精度及其影响因素
    1.原因在日常开发中,Task.Delay是一个常用的异步延迟方法。然而,Task.Delay的定时并不总是非常准确。例如:系统负载Task.Delay的定时精度可能会受到系统负载的影响。如果系统负载较高,CPU和其他资源被大量占用,任务调度可能会被延迟,从而导致Task.Delay的实际延迟时间超过预......