可以把翻倍的操作看作是一个查询和修改(增加刚查询得来的值)的符合操作,然后做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. 运行supervisord -c /etc/supervisor/supervisord.conf 出错,解决办法

    坑都让我踩了...... 1 supervisord -c /etc/supervisor/supervisord.conf 什么意思? 答:手动启动:supervisord        具体详见 ...

  2. Vue Element Tabe Pager 分页方案

    表格和分页分离的,但是使用中,却是结合在一起的. 分析 有以下方式触发查询: mounted 加载数据. 查询按钮 加载数据. pager 变化加载数据 加载数据函数: loadData 问题 mou ...

  3. StackOverflow 问题

    StackOverflow  这个问题一般是你的程序里头可能是有死循环或递归调用所产生的:可以查看一下你的程序,也可以增大你JVM的内存~~~在Eclipse中JDK的配置中加上   -XX:MaxD ...

  4. 【个人阅读】软件工程M1/M2阶段总结

    这次作业是好久以前布置的,由于学期末课程设计任务比较重,我在完善M2阶段的代码的同时又忙于数据库的实现和编译器的实现,一度感觉忙得透不过气来....到这些都基本完成的时候,会看自己以前的阅读心得,觉得 ...

  5. JavaScript中的cookie

    cookie本身没什么可介绍的,但是cookie在JavaScript中,有很多需要注意的 首先,cookie在JavaScript中,是window.document对象的一个属性,所以访问cook ...

  6. [转帖]Nginx安装及配置详解 From https://www.cnblogs.com/zhouxinfei/p/7862285.html

    Nginx安装及配置详解   nginx概述 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP ...

  7. 关于更改ListBox的ItemsPanel样式

    首先定义一个ListBoxItem的样式,用来显示相应的图片信息 <Style TargetType="{x:Type ListBoxItem}" > <Sett ...

  8. cordic

    cordic里向量旋转得到新向量,利用的是旋转矩阵 摘自百度百科维基百科 旋转矩阵(Rotation matrix)是在乘以一个向量的时候改变向量的方向但不改变大小的效果的矩阵.旋转矩阵不包括反演,它 ...

  9. yield与递归的组合运用

  10. HTML-XML数据解析

    HTML代码 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> ...