右转学倍增值域分块

直接在神秘数的做法上大力树套树是 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. Golang 301永久重定向

    比如我要把www.taadis.com永久重定向到taadis.com //main.go package main import ( "log" "net/http&q ...

  2. Linux centos8 VPS基本配置之SSH

    Linux centos8 VPS基本配置之SSH 最近在使用阿里云的时候,需要安装一些nodejs模块,但是总是安装失败,我已经使用了淘宝镜像cnpm加速,查看了具体原因是有github的依赖. 阿 ...

  3. Web前端入门第 47 问:CSS @media 媒体查询不要只会视口宽度适配

    @media 媒体查询的出现解决了什么问题? 曾经,一个网页要兼容移动端和 PC 端,前端的代码复杂度嗖嗖嗖的飙升,需要使用多套代码对各种屏幕尺寸做适配. @media 的出现解决了 CSS 中无法适 ...

  4. Gin RBAC 权限基础实现

    RBAC (基于角色的访问控制) 是一种广泛应用的权限管理模型, 通过 角色 将 用户 和 权限 解耦, 简化权限分配管理. 用户 (User): 系统的使用者 权限 (Permission): 对资 ...

  5. Flex布局-margin 妙用技巧

    在 flex 布局 中, 通过对子项设置 margin-auto; 的方式去吃掉剩余空间, 这种小技巧在很多时候能极大简化我们的布局哦. 单元素水平垂直居中 如果父容器是 flex, 要实现元素水平垂 ...

  6. 移动端H5页面在不同Android和iOS设备上的兼容适配

    @charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...

  7. 深入浅出:AST 技术的应用与实践

    @charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...

  8. (Pytorch第三天)复制官网教程程序遇到的一系列报错

    先说一下,我之前没学过Python,但是鉴于我是一名c语言高手(雾),我决定现学现用. 首先是https://pytorch.org/tutorials/beginner/basics/optimiz ...

  9. ASP.NET Core Web API中操作方法中的参数来源

    在ASP.NET Core Web API中,有多种方式可以传递参数给操作方法.以下是一些常见的参数传递方式: 路由参数(Route Parameters):参数值从URL的路由中提取. // Rou ...

  10. arcgis创建sqlserver企业级空间数据库过程中出现的问题及解决方案

    在arcgis中创建sqlserver版本的企业空间数据库过程中,出现了多种问题,现把问题的现象.原因和解决方案记录下来,以防遗忘(年纪大了). 1 用sa账号创建空间数据库提示创建失败15456 安 ...