Selection Contest for Rookies 1 E Sum Queries?
时间:2020-04-25
本文章向大家介绍Selection Contest for Rookies 1 E Sum Queries?,主要包括Selection Contest for Rookies 1 E Sum Queries?使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
任意两个数如果在某位上有重叠那么这两个数就可以取
最小值一定是在取区间内两个数的时候取到
按位拆分成10棵线段树,记录当前区间的最小值和次小值
不要忘记合并
时间复杂度O(10(n+m)logn)
#include<bits/stdc++.h> using namespace std; #define N 200005 #define inf 2000000005 int n, m, i, a[N], x, y, j, Divy, t, b[11][N<<2][2], ans; pair<int,int> anst; inline int read(){ int s = 0, w = 1; char ch = getchar(); while(ch < '0' || ch > '9'){ if(ch == '-') w = -1; ch = getchar();} while(ch >= '0' && ch <= '9') s = s * 10 + ch - '0', ch = getchar(); return s * w; } void up(int num,int x) { int ls=x<<1,rs=ls+1; if (b[num][ls][0]<b[num][rs][0]) { if (b[num][ls][1]<b[num][rs][0]) { b[num][x][0]=b[num][ls][0]; b[num][x][1]=b[num][ls][1]; } else { b[num][x][0]=b[num][ls][0]; b[num][x][1]=b[num][rs][0]; } } else { if (b[num][ls][0]<b[num][rs][1]) { b[num][x][0]=b[num][rs][0]; b[num][x][1]=b[num][ls][0]; } else { b[num][x][0]=b[num][rs][0]; b[num][x][1]=b[num][rs][1]; } } } void build(int num,int x,int l,int r) { if (l==r) { b[num][x][0]=b[num][x][1]=inf; return; } int mid=(l+r)>>1; build(num,x<<1,l,mid),build(num,x*2+1,mid+1,r); b[num][x][0]=b[num][x][1]=inf; } void insert(int num,int p,int l,int r,int x,int y) { if (l==r) { b[num][p][0]=y; b[num][p][1]=inf; return; } int mid=(l+r)>>1; if (x<=mid) insert(num,p<<1,l,mid,x,y); else insert(num,p<<1|1,mid+1,r,x,y); up(num,p); } pair<int,int> query(int num,int p,int l,int r,int L,int R) { if (L<=l&&r<=R) return make_pair(b[num][p][0],b[num][p][1]); int anst=0, ans[5]; pair<int,int> ls, rs; int mid=(l+r)>>1; if (L<=mid) { ls=query(num,p<<1,l,mid,L,R); ans[++anst]=ls.first; ans[++anst]=ls.second; } if (R>mid) { rs=query(num,p<<1|1,mid+1,r,L,R); ans[++anst]=rs.first; ans[++anst]=rs.second; } sort(ans+1,ans+anst+1); return make_pair(ans[1],ans[2]); } int main (void) { n=read(),m=read(); for (i=1; i<=n; i++) a[i]=read(); for (i=1; i<=10; i++) build(i,1,1,n); for (i=1; i<=n; i++) { x=a[i]; for (j=1; j<=10; j++) { if (x%10) insert(j,1,1,n,i,a[i]); else insert(j,1,1,n,i,inf); x/=10; } } for (; m; m--) { t=read(),x=read(),y=read(); if (t==1) { Divy=y; for (i=1; i<=10; i++) { if (Divy%10) insert(i,1,1,n,x,y); else insert(i,1,1,n,x,inf); Divy/=10; } } else { ans=inf; for (i=1; i<=10; i++) { anst=query(i,1,1,n,x,y); if (anst.first==inf||anst.second==inf) continue; ans=min(ans,anst.first+anst.second); } if (ans==inf) puts("-1"); else printf("%d\n",ans); } } return 0; }
原文地址:https://www.cnblogs.com/chinakevin/p/12773841.html
- 作为TensorFlow的底层语言,你会用C+构建深度神经网络吗?
- 企业应用中使用Silverlight 3
- oracle:db-link使用
- 5个炫酷的Python工具,你都用过么?
- 保护ASP.NET 应用免受 CSRF 攻击
- .NET:Entity Framework 笔记
- redis 学习笔记(1)-编译、启动、停止
- 致研究者:2018 AI研究趋势
- redis 学习笔记(3)-master/slave(主/从模式)
- 解决Chrome或其它WebKit浏览器input和textarea的黄色/蓝色边框问题
- eclipse/intellij Idea集成jetty
- nginx学习(1):编译、安装、启动
- Immutable(不可变)集合
- nginx学习(2):启动gzip、虚拟主机、请求转发、负载均衡
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- http常见状态码
- golang time相关总结
- [白话解析] 深入浅出熵的概念 & 决策树之ID3算法
- [白话解析] 深入浅出边缘计算
- 变废为宝 | 旧电脑变云数据中心 | Esxi 配置
- 【Java面试总结】Java基础(上篇)
- Esxi安装LEDE(OpenWrt) | 旧电脑变庞路由
- [白话解析] 深入浅出贝叶斯定理
- LEDE(OpenWrt)安装openclash |旁路由技巧 | 配置网络流量全部通过旁路由
- [白话解析] 深入浅出朴素贝叶斯模型原理及应用
- 【Java面试总结】Java基础(下篇)
- 使用现代化的脚本进行 ArcGIS JS API 开发
- TextField suffixIcon点击时TextField 选中弹出键盘<Flutter Bug篇>
- seata redis模式重构之全局事务更新
- 【STM32F407】第7章 RL-TCPnet V7.X网络协议栈移植(RTX5)