首页 > 其他分享 >P8283 「MCOI-08」Dantalion 解题报告

P8283 「MCOI-08」Dantalion 解题报告

时间:2022-09-20 21:13:12浏览次数:124  
标签:MCOI log 08 区间 Dantalion 端点 线性 leqslant 前缀

P8283 「MCOI-08」Dantalion 解题报告:

最近好像有很多人做这道题,把这题题解发一下吧。

可能说的比较啰嗦,见谅。

题意

给定序列 \(a\),\(q\) 次询问一个区间有多少个子区间在异或操作下封闭。

\(1\leqslant n\leqslant 6\times 10^5,1\leqslant q\leqslant 10^6\)。

分析

一个区间合法当且仅当颜色数量等于线性基张成空间大小,

首先有一个很显然的双 \(\log\) 做法是:从左到右移动合法区间的右端点,维护所有左端点到当前位置的线性基大小以及颜色数量,将颜色数量是 \(2\) 的次幂的左端点区间和线性基的左端点区间求交,最后做一遍二维数点。

优化到单 \(\log\) 有三个复杂度瓶颈:

  • 维护线性基大小变化左端点位置:类似 CF1100F Ivan and Burgers 的单 \(\log\) 做法,维护前缀线性基,其中每个位只保留最靠后的位置,此时线性基内所有位置即为所求;
  • 维护颜色数量是 \(2\) 的幂次的左端点区间:使用 \(\log\) 个指针表示答案,每次加入一个数字时找到其上一次出现位置,将其打上删除标记并将其后的指针暴力向后移动;
  • 二维数点:对于一个线性基大小,在右端点向右移动时,左端点区间的左右端点均是单调的,将其差分可以得到很多个右端点单调的前缀加,这一问题可以线性解决。
    具体做法类似历史版本和,我们从下到上扫,维护每个位置被加入的时间,以及加入的时候对应的前缀和,以及这两个东西的前缀和,询问差分成只有上边界和右边界的 2-side 查询即可方便解决。

image

时间复杂度 \(O(n(\log n+\log a))\)。

代码

想要可以私信我。

标签:MCOI,log,08,区间,Dantalion,端点,线性,leqslant,前缀
From: https://www.cnblogs.com/xiaoziyao/p/16712543.html

相关文章

  • 2022-08-30 第二小组 张鑫 学习笔记
    实训五十二天Servlet学习内容HttpServletRequest//请求  所有和请求相关的操作  当请求来的时候,request就被实例化HttpServletResponse//响应  所有和......
  • Luogu T273083 新的题目 题解
    怕放洛谷有人看,就搬过来了。本题解提供一个\(O(qn)\)的做法(实际上是暴力的优化)。先考虑暴力求解。对于每个操作,要求代价\(W\times(\sum_{i\inX}^{i}w[i]\times......
  • 做题记录整理dp3 P1108. 低价购买(2022/9/20)
    P1108.低价购买第一问很明显是一个最长下降子序列第二问就是一个求方案数,有点难想的就是去重感觉这题难度标的有点偏高#include<bits/stdc++.h>#definefor1(i,a,b)......
  • 第308场周赛
    这次差两分钟做出最后一道题第308场周赛2389.和有限的最长子序列我用的双重循环,时间复杂度挺高的,但是蛮有意思的哈哈哈classSolution{public:vector<int>a......
  • 2022.9.20 1005-1008
    1005#include<stdio.h>#include<stdlib.h>#include<math.h>intmain(){unsignedlonglongn;scanf("%llu",&n);unsignedlonglongm=(unsignedlonglong......
  • 2022.08.24 模拟赛小结
    2022.08.24模拟赛小结题面链接(这个链接只是为了自己方便找,页面设置权限了,不要尝试访问)更好的阅读体验戳此进入(建议您从上方链接进入我的个人网站查看此Blog,在Luo......
  • 2022.08.27 模拟赛小结
    2022.08.27模拟赛小结目录2022.08.27模拟赛小结题面更好的阅读体验戳此进入赛时思路T1T2T3T4正解T2T1T3T4UPD题面链接(这个链接只是为了自己方便找,页面设置权限了,不......
  • 2022.08.31 模拟赛小结
    2022.08.31模拟赛小结目录2022.08.31模拟赛小结题面更好的阅读体验戳此进入赛时思路T1T2T3正解UPD题面PDF链接原题题包(计蒜客)去掉了T4,其余有部分改动(这个链接只......
  • T1008: 计算(a+b)/c的值(信息学一本通C++)
    [题目描述]给定3个整数a、b、c,计算表达式(a+b)/c的的值。[输入]只有一行,包括三个整数a、b、c,数与数之间以一个空格分开。(-10,000<a,b,c<10,000)[输出]只有一行,即表......
  • 2022-2023-1 20221408《计算机基础与程序设计》第三周学习总结
    这个作业属于哪个课程:https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP这个作业要求在哪里:https://www.cnblogs.com/rocedu/p/9577842.html#WEEK03这个作业的目标......