BZOJ_4320_ShangHai2006 Homework_分块
BZOJ_4320_ShangHai2006 Homework_分块
Description
Input
Output
Sample Input
A 3
A 5
B 6
A 9
B 4
Sample Output
3
1
这种求的东西很奇怪的题要想到根号分治。
考虑小于$\sqrt y$这部分答案每次可以暴力更新,设g[i]为当y为i时的答案。
大于$\sqrt y$的这部分相当于有若干后缀,在每个后缀里找最小值,一共最多不超过$\sqrt y$个后缀,那么我们可以$O(\sqrt y)$修改$O(1)$查每个后缀。
具体地,更新时用x更新这个块左端点到x的信息和前面那些块的信息。
代码:
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <stdlib.h>
using namespace std;
#define N 3000050
#define RR register
int M=550;
int pos[N],L[N],f[N],g[N],tag[N],n=3000000;
inline char nc() {
static char buf[100000],*p1,*p2;
return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
}
inline int rd() {
RR int x=0; RR char c=nc();
while(c<'0'||c>'9') c=nc();
while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+c-'0',c=nc();
return x;
}
inline char rc() {
RR char c=nc();
while(c!='A'&&c!='B') c=nc();
return c;
}
char pbuf[10000000] , *pp = pbuf;
inline void write(int x) {
static int sta[35];
RR int top = 0;
if(!x)sta[++top]=0;
while(x) sta[++top] = x % 10 , x /= 10;
while(top) *pp ++ = sta[top -- ] ^ '0';
}
void add(int x) {
int i;
for(i=1;i<=M;i++) {
g[i]=min(g[i],x%i);
}
for(i=L[pos[x]];i<=x;i++) f[i]=min(f[i],x);
for(i=pos[x]-1;i>=0;i--) tag[i]=min(tag[i],x);
}
int ask(int x) {
if(!x) x++;
return min(tag[pos[x]],f[x]);
}
int solve(int x) {
if(x<M) return g[x];
int t=N,i,j;
for(i=0,j=x;i<=n;i=j,j+=x) {
if(j>n) j=n+1;
int y=ask(i);
if(y<j) t=min(t,y-i);
}
return t;
}
int main() {
int i;
for(i=1;i<=n;i++) pos[i]=i/M,f[i]=N;
for(i=n;i;i--) L[pos[i]]=i;
for(i=1;i<M;i++) g[i]=N;
for(i=0;i<=n/M;i++) tag[i]=N;
int q; q=rd();
int x;
while(q--) {
char opt=rc(); x=rd();
if(opt=='A') {
add(x);
}else {
write(solve(x)); *pp++='\n';
}
}
fwrite(pbuf,1,pp-pbuf,stdout);
}
BZOJ_4320_ShangHai2006 Homework_分块的更多相关文章
- PHP搭建大文件切割分块上传功能
背景 在网站开发中,文件上传是很常见的一个功能.相信很多人都会遇到这种情况,想传一个文件上去,然后网页提示"该文件过大".因为一般情况下,我们都需要对上传的文件大小做限制,防止出现 ...
- POJ2104 K-th Number [分块做法]
传送:主席树做法http://www.cnblogs.com/candy99/p/6160704.html 做那倒带修改的主席树时就发现分块可以做,然后就试了试 思想和教主的魔法差不多,只不过那个是求 ...
- HDU 4467 分块
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4467 题意:给定n个点m条边的无向图,点被染色(黑0/白1),边带边权.然后q个询问.询问分为两种: ...
- 2016 ACM/ICPC Asia Regional Dalian Online 1010 Weak Pair dfs序+分块
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total Submissio ...
- CC countari & 分块+FFT
题意: 求一个序列中顺序的长度为3的等差数列. SOL: 对于这种计数问题都是用个数的卷积来进行统计.然而对于这个题有顺序的限制,不好直接统计,于是竟然可以分块?惊为天人... 考虑分块以后的序列: ...
- bzoj2002弹(dan)飞绵羊 分块水过
据说是道lct求深度的题 但是在小猫大的指点下用分块就n^1.5水过了 = =数据忘记加强系列 代码极其不美观,原因是一开始是听小猫大讲的题意,还以为是弹到最前面... #include <cs ...
- C语言两种查找方式(分块查找,二分法)
二分法(必须要保证数据是有序排列的): 分块查找(数据有如下特点:块间有序,块内无序):
- [New Portal]Windows Azure Storage (14) 使用Azure Blob的PutBlock方法,实现文件的分块、离线上传
<Windows Azure Platform 系列文章目录> 相关内容 Windows Azure Platform (二十二) Windows Azure Storage Servic ...
- BZOJ 3343: 教主的魔法 [分块]【学习笔记】
3343: 教主的魔法 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1172 Solved: 526[Submit][Status][Discus ...
随机推荐
- javamail接收邮件(zt)
zt from:http://xiangzhengyan.iteye.com/blog/85961 import <a href="http://lib.csdn.net/base/j ...
- QQ connect client request's parameters are invalid, invalid openid 问题的解决
很多人的这个问题是POST的时候发生,我的也恰好在POST的时候发生.后来我发现可能是因为QQ的这个后端是采用类PHP的语言开发,在动态语言的获取参数时POST参数和GET参数是可以分开读取的,也就是 ...
- MognoDB3.4.2用户访问配置管理
说在前面,官方文档似乎略有瑕疵. 说一下大规则:把绑定IP换成127.0.0.1IP之后,把security的authorization关闭掉做用户添加操作. 添加用户的方法必须是createUser ...
- Create R NoteBook require updated versions of the following packages : knitr,rmarkdown.
Create R NoteBook require updated versions of the following packages : knitr,rmarkdown. 点击yes安装失败的时 ...
- es6(五):class关键字(extends,super,static)
ES5中,生成对象通过构造函数: function A(name,age){ this.name=name; this.age=age } // 在A的prototype属性上定义一个test方法,即 ...
- MyBatis打印SQL执行时间
1.plugins MyBatis官网对于plugins的描述是这样的: MyBatis allows you to intercept calls to at certain points with ...
- Lenghth of Last Word
description: Given a string s consists of upper/lower-case alphabets and empty space characters ' ', ...
- leetCode刷题(找到最长的连续不重复的字符串长度)
Given a string, find the length of the longest substring without repeating characters. Examples: Giv ...
- Python进阶开发之网络编程,socket实现在线聊天机器人
系列文章 √第一章 元类编程,已完成 ; √第二章 网络编程,已完成 ; 本文目录 什么是socket?创建socket客户端创建socket服务端socket工作流程图解socket公共函数汇总实战 ...
- Myeclipse+selenium2.0+Junit+TestNg环境搭建
这周末把自动化的环境搭好了,在网上也百度了很多,现在分享下,希望大家少走一点歪路. 需要用到的安装包都在这个里面,自取: 链接:https://pan.baidu.com/s/10ohf757ztgN ...