浅谈离线分治算法: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:极光的更多相关文章

  1. 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 ...

  2. bzoj4170 极光

    题目链接 题面 题意 把每个位置的点都看成是一个二维坐标系中的点.比如第\(i\)个点就是\((i,a[i])\). 有两种操作 询问:然后每次询问的就是与当前点坐标的曼哈顿距离小于等于\(k\)的点 ...

  3. BZOJ4170:极光(CDQ分治)

    Description "若是万一琪露诺(俗称rhl)进行攻击,什么都好,冷静地回答她的问题来吸引她.对方表现出兴趣的话,那就慢慢地反问.在她考虑答案的时候,趁机逃吧.就算是很简单的问题,她 ...

  4. 使用极光推送(www.jpush.cn)向安卓手机推送消息【服务端向客户端主送推送】C#语言

    在VisualStudio2010中新建网站JPushAndroid.添加引用json帮助类库Newtonsoft.Json.dll. 在web.config增加appkey和mastersecret ...

  5. 使用极光/友盟推送,APP进程杀死后为什么收不到推送(转)

    为什么会存在这样的 问题,刚开始的时候我也搞不清楚,之前用极光的时候杀死程序后也会收到推送,但最近重新再去集成时就完全不好使了,这我就纳闷了,虽然Google在高版本上的android上面不建议线程守 ...

  6. 用JPUSH极光推送实现服务端向安装了APP应用的手机推送消息(C#服务端接口)

    这次公司要我们做一个功能,就是当用户成功注册以后,他登录以后要收到消息,当然这个消息是安装了我们的手机APP应用的手机咯. 极光推送的网站的网址是:https://www.jpush.cn/ 极光推送 ...

  7. 极光推送-适配 iOS10

    //************************ iOS10 适配 **************************// //************************ 11/02/20 ...

  8. iOS推送(利用极光推送)

    本文主要是基于极光推送的SDK封装的一个快速集成极光推送的类的封装(不喜勿喷) (1)首先说一下推送的一些原理: Push的原理: Push 的工作机制可以简单的概括为下图 图中,Provider是指 ...

  9. 极光推送JPush的快速集成

    首先到极光推送的官网上创建一个应用,填写对应的应用名和包名. 创建好之后下载Demo 提取Sdk里面的图片和xml等资源文件放自己项目的相应位置,然后要注意的是.so文件的放置位置: 在main目录下 ...

随机推荐

  1. Android下Opengl ES实现单屏幕双眼显示

    http://blog.csdn.net/u011371324/article/details/68946779 默认情况下,Opengl ES使用系统提供的帧缓冲区作为绘图表面,一般情况下,如果只在 ...

  2. 一个不成熟的编程员,写写 js 的面向对象

    其实感觉本人 js 并未入门,甚至说也是个不合格的编程员,什么面向对象都不会,一直都往 Object 里面填方法,假装很对象的样子. 但学习嘛,这道坎还是得多试几下的,说不定就跨过去了呢. 个人喜欢用 ...

  3. STM32 USB虚拟串口

    串口调试在项目中被使用越来越多,串口资源的紧缺也变的尤为突出.很多本本人群,更是深有体会,不准备一个USB转串口工具就没办法进行开发.本章节来简单概述STM32低端芯片上的USB虚拟串口的移植.在官方 ...

  4. Struts2笔记04——Hello World Example(转)

    原文地址:https://www.tutorialspoint.com/struts_2/ [注释]项目结构,次序估计有误 通过学习Struts2的架构,我们可以知道,在Struts2 web应用中, ...

  5. Linux 调优

    一.系统优化 1.硬件优化 增加内存 更换速度跟高磁盘(sata->sas)可以增加固态硬盘 更换更高校率的网卡,或者双网卡绑定,两个网卡作为一个网卡使用.服务器网卡一般为千兆 2.系统层优化 ...

  6. 机器学习相关知识整理系列之二:Bagging及随机森林

    1. Bagging的策略 从样本集中重采样(有放回)选出\(n\)个样本,定义子样本集为\(D\): 基于子样本集\(D\),所有属性上建立分类器,(ID3,C4.5,CART,SVM等): 重复以 ...

  7. codeforces Codeforces Round #318 div2 A. Bear and Elections 【优先队列】

    A. Bear and Elections time limit per test 1 second memory limit per test 256 megabytes input standar ...

  8. java resources 红叉 Cannot change version of project facet Dynamic Web Module to 2.5

    在使用maven导入项目的时候,markers提示Cannot change version of project facet Dynamic Web Module to 2.5,不能将工程转换为2. ...

  9. linux shell执行SQL脚本

    #!/bin/sh user="user" pass="pass" sqlplus -S $user/$pass select 1 from dual; exi ...

  10. Excel下载打不开

    1.问题描述:今天遇到个问题,对于定时发送邮件,前两天还正常,今天发现邮件能收到,但打不开,显示如下错误: 预览邮件显示: 点击Excel打开,显示如下: 2.问题解决方案 删除对于服务器上部分空间内 ...