原题链接:https://www.lydsy.com/JudgeOnline/problem.php?id=4170

极光

Description

“若是万一琪露诺(俗称rhl)进行攻击,什么都好,冷静地回答她的问题来吸引她。对方表现出兴趣的话,那就慢慢地反问。在她考虑答案的时候,趁机逃吧。就算是很简单的问题,她一定也答不上来。” –《上古之魔书》

天空中出现了许多的北极光,这些北极光组成了一个长度为n的正整数数列a[i],远古之魔书上记载到:2个位置的graze值为两者位置差与数值差的和:

graze(x,y)=|x-y|+|a[x]-a[y]|。

要想破解天罚,就必须支持2种操作(k都是正整数):

Modify x k:将第x个数的值修改为k。

Query x k:询问有几个i满足graze(x,i)<=k。

由于从前的天罚被圣王lmc破解了,所以rhl改进了她的法术,询问不仅要考虑当前数列,还要考虑任意历史版本,即统计任意位置上出现过的任意数值与当前的a[x]的graze值<=k的对数。(某位置多次修改为同样的数值,按多次统计)

Input

第1行两个整数n,q。分别表示数列长度和操作数。

第2行n个正整数,代表初始数列。

第3~q+2行每行一个操作。

N<=40000, 修改操作数<=60000, 询问操作数<=10000, Max{a[i]}(含修改)<=80000

Output

对于每次询问操作,输出一个非负整数表示答案

Sample Input

3 5
2 4 3
Query 2 2
Modify 1 3
Query 2 2
Modify 1 2
Query 1 1

Sample Output

2
3
3

题解

跟BZOJ2989一模一样。。。纯属水博客。

代码
#include<bits/stdc++.h>
#define up(x) MX=max(MX,x)
using namespace std;
const int M=1e6;
struct sd{int op,x,y,val,id,t;};
bool operator <(sd a,sd b)
{if(a.x!=b.x)return a.x<b.x;if(a.y!=b.y)return a.y<b.y;return a.op<b.op;
}
sd ope[M],tmp[M];
int n,q,que[M],ans[M],sum[M],MX,tot,base=1;
bool vis[M];
void off(int op,int id,int x,int y,int k)
{int xx=x-y,yy=x+y,x1,x2,y1,y2;if(!op){up(xx),up(yy),ope[++tot]=(sd){op,xx,yy,0,id,tot};}else{x1=xx-k,y1=yy-k,x2=xx+k,y2=yy+k;if(y1>0)ope[++tot]=(sd){op,x1-1,y1-1,1,id,tot};ope[++tot]=(sd){op,x1-1,y2,-1,id,tot};if(y1>0)ope[++tot]=(sd){op,x2,y1-1,-1,id,tot};ope[++tot]=(sd){op,x2,y2,1,id,tot};up(x2),up(y2);}
}
void in()
{char ch[10];int a,b;scanf("%d%d",&n,&q);for(int i=1;i<=n;++i)scanf("%d",&que[i]),off(0,i,i,que[i],0);for(int i=n+1;i<=n+q;++i){scanf("%s%d%d",ch,&a,&b);if(ch[0]=='M'){que[a]=b;off(0,i,a,b,0);}else off(1,i,a,que[a],b),vis[i]=1;}
}
void add(int v,int s){v+=base;for(;v;v>>=1)sum[v]+=s;}
int query(int ri)
{int ans=0,le=base;ri+=base+1;for(;le^ri^1;le>>=1,ri>>=1){if(le&1^1)ans+=sum[le+1];if(ri&1)ans+=sum[ri-1];}return ans;
}
void cdq(int le,int ri)
{if(le==ri)return;int mid=le+ri>>1,p1=le,p2=mid+1;for(int i=le;i<=ri;++i){if(!ope[i].op&&ope[i].t<=mid)add(ope[i].y,1);if(ope[i].op&&ope[i].t>mid)ans[ope[i].id]+=ope[i].val*query(ope[i].y);}for(int i=le;i<=ri;++i)if(!ope[i].op&&ope[i].t<=mid)add(ope[i].y,-1);for(int i=le;i<=ri;++i)if(ope[i].t<=mid)tmp[p1++]=ope[i];else tmp[p2++]=ope[i];for(int i=le;i<=ri;++i)ope[i]=tmp[i];cdq(le,mid);cdq(mid+1,ri);
}
void ac()
{MX++;while(base<MX)base<<=1;sort(ope+1,ope+1+tot);cdq(1,tot);for(int i=1;i<=q+n;++i)if(vis[i])printf("%d\n",ans[i]);
}
int main()
{in();ac();return 0;
}

BZOJ4170 极光相关推荐

  1. 树根c语言,03-树1 树的同构 (C语言链表实现)

    #include #include #include #include typedef char ElemType; typedef struct BinTree { ElemType data; s ...

  2. 看了极光推送技术原理的几点思考

    看了极光推送技术原理的几点思考 分类: android2012-11-26 20:50 16586人阅读 评论(18) 收藏 举报 目录(?)[+] 移动互联网应用现状 因为手机平台本身.电量.网络流 ...

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

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

  4. java864位官网_jdk8 64位下载-jdk8 64 bit windows官方版 - 极光下载站

    jdk8 64位不仅在原来的版本基础上新增了多种功能内容,而且还拥有非常多的贴心的操作设计,让你在这使用的过程中可以有非常舒心的体会,而且本版本运行环境也是非常的稳定,保证会为你的工作提高非常大的效率 ...

  5. 极光推送后台php接口,极光推送Jpush(v2)接口 服务端PHP版本的REST API推送类

    在许多的手机App开发中推送是一个必须的应用.高大上的企业都会自己投入成本搭建自己的推送服务器,而小微企业则会选择一些服务商,使用他们的服务,减轻自己的运营和维护的成本.Jpush(极光推送)是目前比 ...

  6. 极光大数据:00后王者大军来袭 荣耀手机偏偏独得恩宠

    近日,极光大数据发布了6月<荣耀手机用户画像特征调研报告>,数据显示,荣耀手机25岁以下用户占比21%,26-35岁用户占比54.9%,整体年龄结构呈年轻化趋势.此外,手游应用在荣耀手机用 ...

  7. **极光推送PHP服务器端推送移动设备消息(Jpush V2 api)

    jpush.php  这是推送方法  用到curl发送请求 <?php /*** 极光推送php 服务器端* @author yalong sun* @Email <syl_ad@163. ...

  8. 俄罗斯拟明年在36万台华为平板安装“极光”操作系统

    来源:环球时报 据路透社报道,有消息人士表示,俄罗斯政府已经开始与华为公司就36万台平板电脑安装俄罗斯自己研发的操作系统(OS)"极光"(Aurora,也称奥罗拉)的一项计划展开谈 ...

  9. Laravel 集成 JPush 极光推送指北

    2019独角兽企业重金招聘Python工程师标准>>> 我是一个 Laravel 小白,我是一个 Laravel 小白,我是一个 Laravel 小白(默念三遍再往下读,如果非小白就 ...

  10. 《小印记》源码分享--极光推送服务器篇

    为什么80%的码农都做不了架构师?>>>    笔者这几天刚完成<小印记>的推送功能,今天特分享一下在做的过程中实际解决的问题.如果读者学到了有用的东西,希望能前往App ...

最新文章

  1. 创新的前端 豆瓣书评 摘录
  2. Java 异常(Java Exception)(一)
  3. go语言中的闭包结构
  4. http / 关于长连接和短链接的理解
  5. dropout理解(三)
  6. RedShift到MaxCompute迁移实践指导
  7. C#使用ListView更新数据出现闪烁解决办法
  8. java clock计时_Java Clock类| offset()方法与示例
  9. 二叉树祖先节点_二叉树的祖先
  10. netcat、ncc工具使用
  11. 如何删除git config中的某一个配置项
  12. 四边形内接于圆定理_2020中考几何秘籍:初中最全几何定理和解题思路
  13. 51单片机数码管滚动显示学号_51单片机四位数码管4个LED灯4个按键实现多种功能?...
  14. 【服务器】【私人书库】宝塔安装calibre-web
  15. Unity中LitJson的使用
  16. C++期末课程设计——宾馆客房管理系统(详细报告+源代码+详细注释)(另附加“25+”C++C语言期末课程设计系统下载地址)
  17. redis 报错 Failed to start Advanced key-value store.
  18. oracle汉字转换成拼音首字母和五笔首字母
  19. 软件测试工程师晋升通道
  20. unix time stamp(时间戳)和常规时间相互转换的C++代码

热门文章

  1. 无法访问 请与这台计算机,我们办公室两台电脑想连接一个共享的打印机,但是连接的时候,总是显示无法访问,请与这台计算机的管理员联系,应该怎么设置啊...
  2. linux内核计算list的长度,linux内核list.h头文件分析(四)
  3. linux整盘远程备份,linux实现自动远程备份(scp+ssh)
  4. ES6 Set结构和Map结构(上)
  5. VUE2.0 测试环境配置
  6. [转]Understanding Integration Services Package Configurations
  7. [转帖]Android Bitmap内存限制OOM,Out Of Memory
  8. 发现gmail有邀请权了。有谁需要,先送5个。
  9. Git合并分支代码到主分支的方法总结
  10. Nacos注册中心之服务实例心跳续约与实例过期下线源码解析