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

    Preface 联赛结束后趁着自己还没有一下子把题目忘光,所以趁机改一下题目. 没有和游记一起写主要是怕篇幅太长不美观. 因此这里我们直接讲题目,关于NOIP2018的一些心得和有趣的事详见:NOIP ...

  2. bitcoin 源码解析 - 交易 Transaction(二) - 原理篇

    这篇文章我断断续续写了呃···· 应该快三个星期了? 所以前后的风格可能差别相当大.真是十分的怠惰啊··· 最近实在是不够努力.用python重写bitcoin的项目也卡在网络编程部分(这方面真是我的 ...

  3. Codeforces 996E Leaving the Bar (随机化)

    题目连接:Leaving the Bar 题意:给你n个向量,你可以加这个向量或减这个向量,使得这些向量之和的长度小于1.5e6. 题解: 按照正常的贪心方法,最后的结果有可能大于1.5e6 .这里我 ...

  4. 类似于PLC上升沿的TRIO代码示例

    需求:    一个自复位按钮,控制灯泡的亮与灭(按钮按一次灯亮,再按一次灯灭依次循环). 简短的代码,若大家有更好的思路可以评论区留言. DIM in_button,op_lamp,var_middl ...

  5. centos7下/etc/rc.local文件里配置的开机启动项不执行的解决办法

    习惯于在/etc/rc.local文件里配置我们需要开机启动的服务,这个在centos6系统下是正常生效的.但是到了centos7系统下,发现/etc/rc.local文件里的开机启动项不执行了!仔细 ...

  6. synchronized关键字的学习与总结

  7. 我的software

    每个学计算机软件的同学都有可能经历以下的情况: 1.  哎,我家电脑开不了机了,来帮帮忙 2.  我耳机坏了,你给修修吧 3.  你能换手机屏不 4.  过来看下,我的Word打不开了 等等等等 这些 ...

  8. [福大软工] Z班——Beta现场答辩反馈

    Beta现场答辩 互评反馈 各组对于 麻瓜制造者 的评价与建议 队伍名 评价与建议 *** 功能继续完善,二手市场有闲鱼这条大鱼,要继续体现区域性的优势 *** web端的UI很好看,但安卓和web相 ...

  9. pandas(DataFrame)

    DataFrame是二维数据结构,即数据以行和列的表格方式排列!特点:潜在的列是不同的类型,大小可变,标记行和列,可以对列和行执行算数运算. 其中Name,Age即为对应的Columns,序号0,1, ...

  10. SQL语句及5.7.2 mysql 用户管理

    一.用户的定义 1.1 用户名+主机域 此处为5.7.2版本的mysql当中password字段已改为authentication_string mysql> select user,host, ...