浅谈离线分治算法: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. 交叉编译Mesa,X11lib,Qt opengl

    记录Mesa配置文件如下: Mesa版本:Mesa-10.2.3 CC=/usr/local/arm-4.8.1/bin/arm-none-linux-gnueabi-gcc CXX=/usr/loc ...

  2. Scrapy安装方法

    Scrapy安装在Python2.7环境下 1.配置环境变量: 2.安装基础软件 4个(64位系统) 安装twisted: C:\Users\Administrator>pip  install ...

  3. OC中NSSet去重细节

    我们都知道,NSSet在存储数据时,不允许存储相同数据?那么,这里的相同该如何理解呢? 很多人都简单的理解为按照其存储对象的内存地址进行评判.其实不然.经过个人实验证明:当类型为NSString,NS ...

  4. IDEA使用前的各种基本设置(转)

    先搞个链接,以后自己慢慢总结:传送门

  5. Android编译系统环境过程初始化分析【转】

    本文转载自:http://blog.csdn.net/luoshengyang/article/details/18928789 Android源代码在编译之前,要先对编译环境进行初始化,其中最主要就 ...

  6. SQL Server 字符串拼接与拆分 string varchar Split and Join

    1.Split    SQL Server 2008 新语法: DECLARE @str VARCHAR(MAX) SET @str = REPLACE(@teeIDs, ',', '''),(''' ...

  7. nginx 反向代理配置之---可配置多域名请求

    配置文件如下: server { listen 80; server_name ngin服务器所对应的的域名; error_log /data/logs/nginx/mainsite.error.lo ...

  8. java 实现HTTP连接(HTTPClient)

    在实习中,使用到了http连接,一直理解的很模糊,特地写个分析整理篇.分析不到位的地方请多多指教. Http 目前通用版本为 http 1.1 . Http连接大致分为2种常用的请求——GET,POS ...

  9. JMeter报错 ERROR o.a.j.t.JMeterThread: Test failed!

    第一次用JMeter,然后跟着教程走,发现进行测试的时候直接报错 显示如下 反复测试依然报错,网上搜索也没什么结果,自己测试了一下才发现问题. 左边创建了CSV DATA 但是并没有进行设置  导致报 ...

  10. 刻录DVD.XP系统盘(U盘)

    ZC:用这个软件,安装太慢了... 忽然发现 以前有别的软件可以使用:http://www.cnblogs.com/vmskill/p/6196522.html 1.我是在这个论坛看到 这个工具的:h ...