BZOJ4170:极光
浅谈离线分治算法:https://www.cnblogs.com/AKMer/p/10415556.html
题目传送门:https://lydsy.com/JudgeOnline/problem.php?id=4170
出题人语文小学水平没达到系列(
这就是一个有时间先后的二维加点二维数点问题。每个点是\((i,a_i)\)
先把坐标轴转化一下,让曼哈顿距离变成切比雪夫距离。\((x,y)--->(x+y,x-y)\)
然后询问就变成矩阵询问了。
时间复杂度:\(O(nlog^2n)\)
空间复杂度:\(O(n+\)玄学值域大小\()\)
代码如下:
#include <cstdio>
#include <algorithm>
using namespace std;
#define low(i) ((i)&(-(i)))
#define X x+y
#define Y x-y
const int maxn=6e4+6;
char s[20];
int n,m,cnt,ans_cnt;
int a[maxn],ans[maxn];
int read() {
int x=0,f=1;char ch=getchar();
for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;
for(;ch>='0'&&ch<='9';ch=getchar())x=x*10+ch-'0';
return x*f;
}
struct Oper {
int opt,id,x,y,v,tim;
Oper() {}
Oper(int _opt,int _id,int _x,int _y,int _v,int _tim) {
opt=_opt,id=_id,x=_x,y=_y,v=_v,tim=_tim;
}
}p[maxn*5];
bool cmp(Oper a,Oper b) {
if(a.x==b.x)return a.tim<b.tim;
return a.x<b.x;
}
struct tree_array {
int c[500005];
void add(int pos,int v) {
pos+=240000;
for(int i=pos;i<=500000;i+=low(i))
c[i]+=v;
}
int query(int pos) {
pos+=240000;
int res=0;
for(int i=pos;i;i-=low(i))
res+=c[i];
return res;
}
}T;
void solve(int l,int r) {
if(l==r)return;
int mid=(l+r)>>1;
solve(l,mid),solve(mid+1,r);
sort(p+l,p+r+1,cmp);
for(int i=l;i<=r;i++)
if(p[i].opt&&p[i].tim<=mid)T.add(p[i].y,1);
else if(!p[i].opt&&p[i].tim>mid)ans[p[i].id]+=p[i].v*T.query(p[i].y);
for(int i=l;i<=r;i++)
if(p[i].opt&&p[i].tim<=mid)T.add(p[i].y,-1);
}
int main() {
cnt=n=read(),m=read();
for(int x=1,y;x<=n;x++) {
a[x]=y=read();
p[x]=Oper(1,0,X,Y,0,x);
}
for(int i=1;i<=m;i++) {
scanf("%s",s+1);
if(s[1]=='Q') {
int x=read(),y=a[x],limit=read();++ans_cnt;
++cnt,p[cnt]=Oper(0,ans_cnt,X+limit,Y+limit,1,cnt);
++cnt,p[cnt]=Oper(0,ans_cnt,X+limit,Y-limit-1,-1,cnt);
++cnt,p[cnt]=Oper(0,ans_cnt,X-limit-1,Y+limit,-1,cnt);
++cnt,p[cnt]=Oper(0,ans_cnt,X-limit-1,Y-limit-1,1,cnt);
}
else {
int x=read(),y=read();a[x]=y;
++cnt,p[cnt]=Oper(1,0,X,Y,0,cnt);
}
}
solve(1,cnt);
for(int i=1;i<=ans_cnt;i++)
printf("%d\n",ans[i]);
return 0;
}
BZOJ4170:极光的更多相关文章
- BZOJ4170 极光(CDQ分治 或 树套树)
传送门 BZOJ上的题目没有题面-- [样例输入] 3 5 2 4 3 Query 2 2 Modify 1 3 Query 2 2 Modify 1 2 Query 1 1 [样例输出] 2 3 3 ...
- bzoj4170 极光
题目链接 题面 题意 把每个位置的点都看成是一个二维坐标系中的点.比如第\(i\)个点就是\((i,a[i])\). 有两种操作 询问:然后每次询问的就是与当前点坐标的曼哈顿距离小于等于\(k\)的点 ...
- BZOJ4170:极光(CDQ分治)
Description "若是万一琪露诺(俗称rhl)进行攻击,什么都好,冷静地回答她的问题来吸引她.对方表现出兴趣的话,那就慢慢地反问.在她考虑答案的时候,趁机逃吧.就算是很简单的问题,她 ...
- 使用极光推送(www.jpush.cn)向安卓手机推送消息【服务端向客户端主送推送】C#语言
在VisualStudio2010中新建网站JPushAndroid.添加引用json帮助类库Newtonsoft.Json.dll. 在web.config增加appkey和mastersecret ...
- 使用极光/友盟推送,APP进程杀死后为什么收不到推送(转)
为什么会存在这样的 问题,刚开始的时候我也搞不清楚,之前用极光的时候杀死程序后也会收到推送,但最近重新再去集成时就完全不好使了,这我就纳闷了,虽然Google在高版本上的android上面不建议线程守 ...
- 用JPUSH极光推送实现服务端向安装了APP应用的手机推送消息(C#服务端接口)
这次公司要我们做一个功能,就是当用户成功注册以后,他登录以后要收到消息,当然这个消息是安装了我们的手机APP应用的手机咯. 极光推送的网站的网址是:https://www.jpush.cn/ 极光推送 ...
- 极光推送-适配 iOS10
//************************ iOS10 适配 **************************// //************************ 11/02/20 ...
- iOS推送(利用极光推送)
本文主要是基于极光推送的SDK封装的一个快速集成极光推送的类的封装(不喜勿喷) (1)首先说一下推送的一些原理: Push的原理: Push 的工作机制可以简单的概括为下图 图中,Provider是指 ...
- 极光推送JPush的快速集成
首先到极光推送的官网上创建一个应用,填写对应的应用名和包名. 创建好之后下载Demo 提取Sdk里面的图片和xml等资源文件放自己项目的相应位置,然后要注意的是.so文件的放置位置: 在main目录下 ...
随机推荐
- STM32系列第15篇--灵活的静态存储控制器FSMC
源: STM32系列第15篇--灵活的静态存储控制器FSMC
- shell中的$()、${}、$(())、(())
$( ) 与 ` ` (反引号)在 bash shell 中,$( ) 与 ` ` (反引号) 都是用来做命令替换用(command substitution)的. 所谓的命令替换与我们第五章学过的变 ...
- CentOS 7 导入epel库
yum install epel-release 或者到百度云下载相应的 rpm 包进行安装 rpm -ivh epel-release-7-9.noarch.rpm
- zookeeper分布式锁的问题
分布式锁的流程: 在zookeeper指定节点(locks)下创建临时顺序节点node_n 获取locks下所有子节点children 对子节点按节点自增序号从小到大排序 判断本节点是不是第一个子节点 ...
- RequestMapping请求映射方式
1.标准映射 规则: 1) @RequestMapping可以设置在类上,也可以设置在方法上 2) 请求的映射规则是:类上的RequestMapping + 方法上的RequestMapping 3) ...
- 多校HDU5723 最小生成树+dfs回溯
Abandoned country Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- 【atcoder】Two Sequences [arc092 D](思维题)
题目传送门:https://arc092.contest.atcoder.jp/tasks/arc092_b 这场arc好难啊...这场感觉不像正常的arc...其实这道题还可以更早写出来的,但是蒟蒻 ...
- 按F12 IE浏览器的开发工具打不开解决方法
在电脑的任务栏中选中开发人员工具窗体右击,出现以下页面: 点击移动菜单项,然后用键盘的上下左右键移动,直到开发人员工具的最小化窗体出现:
- SpringCloud-高可用的分布式配置中心(config)
当服务实例很多时,都从配置中心读取文件,这是可以考虑将配置中心做成一个微服务,将其集群化,从而达到高可用 新建一个注册中心 pom如下 <?xml version="1.0" ...
- getchar与scanf区别
scanf可以一次按照设定的输入格式输入多个变量数据.如int d,float f,char str[20],scanf("%d%f%s",d,f,str); getchar()只 ...