可以把翻倍的操作看作是一个查询和修改(增加刚查询得来的值)的符合操作,然后做cdq就行了

 #include<bits/stdc++.h>
#define pa pair<int,int>
#define lowb(x) ((x)&(-(x)))
#define REP(i,n0,n) for(i=n0;i<=n;i++)
#define PER(i,n0,n) for(i=n;i>=n0;i--)
#define MAX(a,b) ((a>b)?a:b)
#define MIN(a,b) ((a<b)?a:b)
#define CLR(a,x) memset(a,x,sizeof(a))
#define rei register int
using namespace std;
typedef long long ll;
const int maxn=; inline ll rd(){
ll x=;char c=getchar();int neg=;
while(c<''||c>''){if(c=='-') neg=-;c=getchar();}
while(c>=''&&c<='') x=x*+c-'',c=getchar();
return x*neg;
} struct Node{
int x,y,tp,id;
}op[maxn];
int N,M,rg[maxn],tmp[maxn];
ll tr[maxn],ans[maxn]; inline void add(int x,ll y){
for(;x<=M;x+=lowb(x)) tr[x]+=y;
}
inline ll query(int x){
ll re=;for(;x;x-=lowb(x)) re+=tr[x];return re;
} inline bool cmp(int a,int b){
return op[a].x<op[b].x;
} void cdq(int l,int r){
if(l>=r) return;
// printf("!%d %d\n",l,r);
int m=(l+r)>>;
cdq(l,m);
memcpy(tmp+l,rg+l,*(r-l+));
sort(tmp+l,tmp+m+,cmp);sort(tmp+m+,tmp+r+,cmp);
int p=l,q=m+;
for(;q<=r&&op[tmp[q]].x<op[tmp[l]].x;q++);
for(;q<=r;p++){
// printf("%d %d\n",p,q);
Node a=op[tmp[p]];
if(a.tp==)
add(a.y,);
else if(a.tp==)
add(a.y,ans[a.id]);
for(int i=q;i<=r&&op[tmp[i]].x==a.x;i++){
if(op[tmp[i]].y==a.y&&op[tmp[i]].tp==){
// printf("!!%d\n",tmp[i]);
if(a.tp==) ans[op[tmp[i]].id]++;
else if(a.tp==) ans[op[tmp[i]].id]+=ans[a.id];
}
}
for(;q<=r&&(p==m||op[tmp[q]].x<op[tmp[p+]].x);q++){
// printf("%d\n",q);
if(op[tmp[q]].tp==){
ans[op[tmp[q]].id]+=query(op[tmp[q]].y);
}
}
}
p--;
while(p>=l){
Node a=op[tmp[p--]];
if(a.tp==)
add(a.y,-);
else if(a.tp==)
add(a.y,-ans[a.id]);
}
cdq(m+,r);
} int main(){
freopen("21.in","r",stdin);
freopen("21.txt","w",stdout);
rei i;
N=rd();
for(i=;i<=N;i++){
char s[];
scanf("%s",s);
if(s[]=='Q') op[i].tp=;
else if(s[]=='A') op[i].tp=;
else op[i].tp=;
op[i].x=rd(),op[i].y=rd(),op[i].id=i;
M=max(M,op[i].y);
rg[i]=i;
}
cdq(,N);
for(i=;i<=N;i++) if(op[i].tp==) printf("%lld\n",ans[i]);
return ;
}

suoi21 高能显示屏 (cdq分治)的更多相关文章

  1. suoi44 核能显示屏 (cdq分治)

    首先二维树状数组肯定开不下 仿照二维树状数组的做法,如果有差分数组$d[i][j]=a[i][j]-a[i-1][j]-a[i][j-1]+a[i-1][j-1]$,那么就有: $$sum[x][y] ...

  2. 【教程】简易CDQ分治教程&学习笔记

    前言 辣鸡蒟蒻__stdcall终于会CDQ分治啦!       CDQ分治是我们处理各类问题的重要武器.它的优势在于可以顶替复杂的高级数据结构,而且常数比较小:缺点在于必须离线操作. CDQ分治的基 ...

  3. BZOJ 2683 简单题 ——CDQ分治

    [题目分析] 感觉CDQ分治和整体二分有着很本质的区别. 为什么还有许多人把他们放在一起,也许是因为代码很像吧. CDQ分治最重要的是加入了时间对答案的影响,x,y,t三个条件. 排序解决了x ,分治 ...

  4. HDU5618 & CDQ分治

    Description: 三维数点 Solution: 第一道cdq分治...感觉还是很显然的虽然题目不能再傻逼了... Code: /*=============================== ...

  5. 初识CDQ分治

    [BZOJ 1176:单点修改,查询子矩阵和]: 1176: [Balkan2007]Mokia Time Limit: 30 Sec  Memory Limit: 162 MBSubmit: 200 ...

  6. HDU5322 Hope(DP + CDQ分治 + NTT)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5322 Description Hope is a good thing, which can ...

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

  8. BZOJ2683 简单题(CDQ分治)

    传送门 之前听别人说CDQ分治不难学,今天才知道果真如此.之前一直为自己想不到CDQ的方法二很不爽,今天终于是想出来了一道了,太弱-- cdq分治主要就是把整段区间分成两半,然后用左区间的值去更新右区 ...

  9. BNUOJ 51279[组队活动 Large](cdq分治+FFT)

    传送门 大意:ACM校队一共有n名队员,从1到n标号,现在n名队员要组成若干支队伍,每支队伍至多有m名队员,求一共有多少种不同的组队方案.两个组队方案被视为不同的,当且仅当存在至少一名队员在两种方案中 ...

随机推荐

  1. Ubuntu16.04程序自启动

    试过修改/etc/rc.local文件,但是启动无效. 目前试过行之有效的方式如下: 参考:https://www.aliyun.com/jiaocheng/186625.html 在终端执行 gno ...

  2. 2.RapidIO串行物理层的包与控制符号

    转自https://www.cnblogs.com/liujinggang/p/9932150.html 一.RapidIO串行物理层背景介绍 上篇博文提到RapidIO的物理层支持串行物理层与并行物 ...

  3. 一致性哈希(hash)算法

    一.算法背景 一致性哈希算法在1997年由麻省理工学院的Karger等人在解决分布式Cache中提出的,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似.一致性哈希修正 ...

  4. Nginx的location配置规则梳理

    Nginx几乎是当下绝大多数公司在用的web应用服务,熟悉Nginx的配置,对于我们日常的运维工作是至关重要的,下面就Nginx的location配置进行梳理: 1)location匹配的是nginx ...

  5. nginx域名访问的白名单配置梳理

    在日常运维工作中,会碰到这样的需求:设置网站访问只对某些ip开放,其他ip的客户端都不能访问.可以通过下面四种方法来达到这种效果:1)针对nginx域名配置所启用的端口(比如80端口)在iptable ...

  6. centos7.2部署vnc服务记录

    不做过多介绍了,下面直接记录下centos7系统下安装配置vncserver的操作记录 0)更改为启动桌面或命令行模式 获取当前系统启动模式 [root@localhost ~]# systemctl ...

  7. 第三个Sprint冲刺第五天(燃尽图)

  8. 在Windows下查看Java的JRE路径

    java -showversionecho %JAVA_HOME%path 这个方法可以确认当前java.exe的版本,但是并不能确定输出JRE的具体路径. JAVA_HOME的路径,也不一定就是当前 ...

  9. Mybatis复杂嵌套关联一例

    Mybatis  three entity relation:association in collection PatentMapper.xml <resultMap id="Bas ...

  10. ASP.NET MVC缓存使用

    局部缓存(Partial Page) 1.新建局部缓存控制器: public class PartialCacheController : Controller { // GET: /PartialC ...