右转学倍增值域分块

直接在神秘数的做法上大力树套树是 naive 的,考虑将值域分块的做法代入优化。

对于一个块 \([2^{k}, 2^{k+1})\) 内最小的数 \(m\),如果当前可以表示出的最大的数 \(x\ge m\),那么整个块内的元素都会被选(因为 \(x+m \ge m+2^{k}\ge 2^{k}+2^{k}=2^{k+1}\)),我们只需要维护区间内每个块的最小值和 \(sum\) 就行了,单点修改是容易的。

复杂度 \(O(n\log^2 n)\)。

#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <cctype>
#include <vector>
#include <queue>
#include <bitset>
#define vi vector<int>
#define pb push_back
#define mp make_pair
#define st first
#define nd second
using namespace std;
typedef long long ll;
typedef pair <int, int> Pii;
typedef pair <int, ll> Pil;
const int INF=0x3f3f3f3f;
const int cp=998244353;
inline int mod(int x){if(x>=cp) x-=cp;if(x<0) x+=cp;return x;}
inline void plust(int &x, int y){x=mod(x+y);return ;}
inline void minut(int &x, int y){x=mod(x-y);return ;}
inline int read(){
char ch=getchar();int x=0, f=1;
while(!isdigit(ch)){if(ch=='-') f=-1; ch=getchar();}
while(isdigit(ch)){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
return x*f;
}
inline void write(int x){
if(x<0) putchar('-'), x=-x;
if(x>9) write(x/10);
putchar(x%10+'0');
}
inline int ksm(int a, int b=cp-2){
int ret=1;
for(; b; b>>=1, a=1ll*a*a%cp)
if(b&1) ret=1ll*ret*a%cp;
return ret;
}
const int N=2e5+5;
#define ls k<<1
#define rs k<<1|1
#define mid (l+r>>1)
int mn[N<<2][20];
ll sum[N<<2][20];
void pushup(int k){
for(int i=0; i<20; ++i)
mn[k][i]=min(mn[ls][i], mn[rs][i]),
sum[k][i]=sum[ls][i]+sum[rs][i];
}
void update(int k, int l, int r, int x, int v){
if(l==r){
int t=__lg(v);
for(int i=0; i<20; ++i)
mn[k][i]=(i^t)?INF:v, sum[k][i]=(i^t)?0:v;
return ;
}
if(x<=mid) update(ls, l, mid, x, v);
else update(rs, mid+1, r, x, v);
return pushup(k);
}
Pil operator + (Pil a, Pil b){return mp(min(a.st, b.st), a.nd+b.nd);}
Pil query(int k, int l, int r, int x, int y, int d){
if(x>r||y<l||x>y) return mp(INF, 0ll);
if(x<=l&&r<=y) return mp(mn[k][d], sum[k][d]);
return query(ls, l, mid, x, y, d)+query(rs, mid+1, r, x, y, d);
}
#undef ls
#undef rs
#undef mid
int n, m;
signed main(){
n=read(), m=read();
for(int i=1; i<=n; ++i) update(1, 1, n, i, read());
for(int i=1; i<=m; ++i){
int op=read(), x=read(), y=read();
if(op&1) update(1, 1, n, x, y);
else{
ll ans=0;
for(int j=0; j<20; ++j){
Pil t=query(1, 1, n, x, y, j);
if(t.st<=ans+1) ans+=t.nd;
else break;
}
printf("%lld\n", ans+1);
}
}
return 0;
}

计蒜客 A2285 / 2019ICPC徐州 H - Yuuki and a problem的更多相关文章

  1. 2019icpc徐州站 Cat 计蒜客 - 42540 && The Answer to the Ultimate Question of Life, The Universe, and Everything. 计蒜客 - 42545

    VJ链接:https://vjudge.net/contest/412095#problem/A Cat 计蒜客 - 42540 题意: 给你一个区间[L,R],给你现在拥有的钱S.你需要从[L,R] ...

  2. 计蒜客 作弊揭发者(string的应用)

    鉴于我市拥堵的交通状况,市政交管部门经过听证决定在道路两侧安置自动停车收费系统.当车辆驶入车位,系统会通过配有的摄像头拍摄车辆画面,通过识别车牌上的数字.字母序列识别车牌,通过连接车管所车辆信息数据库 ...

  3. 计蒜客的一道题dfs

    这是我无聊时在计蒜客发现的一道题. 题意: 蒜头君有一天闲来无事和小萌一起玩游戏,游戏的内容是这样的:他们不知道从哪里找到了N根不同长度的木棍, 看谁能猜出这些木棍一共能拼出多少个不同的不等边三角形. ...

  4. 计蒜客模拟赛5 D2T1 成绩统计

    又到了一年一度的新生入学季了,清华和北大的计算机系同学都参加了同一场开学考试(因为两校兄弟情谊深厚嘛,来一场联考还是很正常的). 不幸的是,正当老师要统计大家的成绩时,世界上的所有计算机全部瘫痪了. ...

  5. 计蒜客 31436 - 提高水平 - [状压DP]

    题目链接:https://nanti.jisuanke.com/t/31436 作为一名车手,为了提高自身的姿势水平,平时的练习是必不可少的.小 J 每天的训练包含 $N$ 个训练项目,他会按照某个顺 ...

  6. 计蒜客 31434 - 广场车神 - [DP+前缀和]

    题目链接:https://nanti.jisuanke.com/t/31434 小 D 是一位著名的车手,他热衷于在广场上飙车.每年儿童节过后,小 D 都会在广场上举行一场别样的车技大赛. 小 D 所 ...

  7. [计蒜客] 矿石采集【记搜、Tarjan缩点+期望Dp】

    Online Judge:计蒜客信息学3月提高组模拟赛 Label:记搜,TarJan缩点,树状数组,期望Dp 题解 整个题目由毫无关联的两个问题组合成: part1 问题:对于每个询问的起点终点,求 ...

  8. 2019计蒜客信息学提高组赛前膜你赛 #2(TooYoung,TooSimple,Sometimes Naive

    计蒜客\(2019CSP\)比赛第二场 巧妙爆零这场比赛(我连背包都不会了\(QWQ\) \(T1\) \(Too\) \(Young\) 大学选课真的是一件很苦恼的事呢! \(Marco\):&qu ...

  9. 计蒜客 等边三角形 dfs

    题目: https://www.jisuanke.com/course/2291/182238 思路: 1.dfs(int a,int b,int c,int index)//a,b,c三条边的边长, ...

  10. 计蒜客 方程的解数 dfs

    题目: https://www.jisuanke.com/course/2291/182237 思路: 来自:https://blog.csdn.net/qq_29980371/article/det ...

随机推荐

  1. 【Guava】IO工具

    引言 Guava 使用术语 流来表示可关闭的,并且在底层资源中有位置状态的 I/O 数据流.字节流对应的工具类为 ByteSterams,字符流对应的工具类为 CharStreams. Guava 中 ...

  2. 0x00 语法知识

    目录 C++ STL Vector Pair String Queue Stack Deque Set Map Bitset Algorithm库函数 Reverse Unique Random_sh ...

  3. Unity3D教程:次表面散射的简单实现

    次表面散射指的是光线射入半透明材质,在内部发生散射后再透射出来的光线传播过程,考虑到有些项目会需要使用次表面散射,下面就给大家介绍下在Unity3D中次表面散射的简单实现,希望可以帮到大家. 一.前言 ...

  4. 🎀Docker下Dubbo服务优雅上下线实现

    简介 在Docker容器环境中部署基于Dubbo的服务时,实现服务的优雅上下线是至关重要的.这通常涉及到两个关键步骤:首先,确保服务能够从注册中心摘除,停止接受新的请求:其次,等待所有正在处理的请求完 ...

  5. 大模型微调实战:通过 LoRA 微调修改模型自我认知

    本文主要分享如何使用 LLaMAFactory 实现大模型微调,基于 Qwen1.5-1.8B-Chat 模型进行 LoRA 微调,修改模型自我认知. 本文的一个目的:基于 Qwen1.5-1.8B- ...

  6. 【自用】MySQL数据库基本操作

    docker 中下载 mysql docker pull mysql 启动 docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=12 ...

  7. 想让鸿蒙应用快的“飞起”,来HarmonyOS开发者官网“最佳实践-性能专区”

    在鸿蒙应用开发过程中,应用侧流畅运行体验是开发者非常关注的部分.为此,华为HarmonyOS开发者官网推出了"最佳实践-性能专区"(以下简称"性能专区"),通过 ...

  8. <HarmonyOS第一课03>ArkTS语法介绍

    视频链接: https://developer.huawei.com/consumer/cn/training/course/slightMooc/C101717496870909384?ha_sou ...

  9. Spring编程式事务控制

    目录 Spring编程式事务控制 代码实现 测试 Spring编程式事务控制 实际中很少使用 代码实现 pom.xml <?xml version="1.0" encodin ...

  10. CentOS 7怎么开放端口

    转自:https://www.jb51.net/os/Ubuntu/617627.html 以开放8080端口为例,其他类似 centos7已经开始使用firewall作为防火墙,而不是iptable ...