可以把翻倍的操作看作是一个查询和修改(增加刚查询得来的值)的符合操作,然后做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. SQL多表查询总结

    前言 连接查询包括合并.内连接.外连接和交叉连接,如果涉及多表查询,了解这些连接的特点很重要.只有真正了解它们之间的区别,才能正确使用. 一.Union UNION 操作符用于合并两个或多个 SELE ...

  2. xcode archive 去掉dsym文件和添加dsym文件

    打包慢,让人发狂!!! 所以我们尝试的去掉一些测试时候用不到的东西 比如DSYM: 这DSYM是收集奔溃的.在测试的时候不需要这些东西的所以去掉就好: 项目  Build Settings -> ...

  3. 【Beta阶段】第六次Scrum Meeting!

    每日任务内容: 本次会议为第六次Scrum Meeting会议~ 由于本次会议项目经理召开时间为9:30,在公寓1楼会客室召开,召开时长约30分钟,探讨了本次取得的重大突破后需要继续开展的工作. 队员 ...

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

    1.以前博客链接 http://www.cnblogs.com/penglinjiang/p/4027850.html http://www.cnblogs.com/penglinjiang/p/40 ...

  5. [Beta]M2事后分析

    计划 你原计划的工作是否最后都做完了? 如果有没做完的,为什么? 答:没有,全部的功能没有实现.其中,界面还差两个,逻辑还差闹钟逻辑和群组逻辑,可以说这些东西是我们的核心功能之一,缺失了他们对我们整个 ...

  6. Daily Scrumming* 2015.12.19(Day 11)

    一.团队scrum meeting照片 二.成员工作总结 姓名 任务ID 迁入记录 江昊 任务1090 https://github.com/buaaclubs-team/temp-front/com ...

  7. Linux内核分析第二周:操作系统是如何工作的

    第一讲 函数调用堆栈 计算机是如何工作的? (总结)——三个法宝 1,存储程序计算机工作模型,计算机系统最最基础性的逻辑结构: 2,函数调用堆栈,高级语言得以运行的基础,只有机器语言和汇编语言的时候堆 ...

  8. 使用matlab自带工具实现rcnn

    平台:matlab2016b matlab自带一个cifar10Net工具可用于深度学习. 图片标注 这里使用的是matlab自带的工具trainingImageLabeler对图像进行roi的标注. ...

  9. XMLHttpRequest.withCredentials

    https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/withCredentials var xhr = new XMLHtt ...

  10. Eclipse使用Maven2的一次环境清理记录

    1. C:\Users\Administrator\.m2\repository\com\yuanchuangyun\[module,yuanchuangyun-*]相关目录全删除.2. D:\wor ...