CQQ分治

Code

#include <cstdio>
#include <cstring>
#define N 50010 struct info{
int x,p,v;
info(int a,int b,int c):x(a),p(b),v(c){}
info(){x=p=v=0;}
friend bool operator < (info a,info b){
return a.p==b.p?a.x<b.x:a.p<b.p;
}
}que[N*3],tmp[N*3];
int n,qn,an,Ans[N]; inline int read(){
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
} inline void Init(){
qn=an=0;
memset(Ans,0,sizeof(Ans));
n=read();
for(int i=1,x;i<=n;++i) x=read(),que[qn++]=info(1,i,x);
char s[10];
for(;;){
scanf("%s",s);
if(s[0]=='E') break;
if(s[0]=='Q'){
int l=read(),r=read();
que[qn++]=info(2,l-1,an);
que[qn++]=info(3,r,an++);
}else{
int p=read(),v=read();
if(s[0]=='S') v=-v;
que[qn++]=info(1,p,v);
}
}
} void solve(int l,int r){
if(l+1>=r) return;
int m=(l+r)>>1;
solve(l,m),solve(m,r);
int p=l,q=m,cnt=0,sum=0;
while(p<m&&q<r){
if(que[p]<que[q]){
if(que[p].x==1) sum+=que[p].v;
tmp[cnt++]=que[p++];
}else{
if(que[q].x==2) Ans[que[q].v]-=sum;
else if(que[q].x==3) Ans[que[q].v]+=sum;
tmp[cnt++]=que[q++];
}
}
while(p<m) tmp[cnt++]=que[p++];
while(q<r){
if(que[q].x==2) Ans[que[q].v]-=sum;
else if(que[q].x==3) Ans[que[q].v]+=sum;
tmp[cnt++]=que[q++];
}
for(int i=0;i<cnt;++i) que[i+l]=tmp[i];
} int main(){
for(int T=read(),i=1;i<=T;++i){
Init();
solve(0,qn);
printf("Case %d:\n",i);
for(int i=0;i<an;++i) printf("%d\n",Ans[i]);
}
}

[Hdu1166]敌兵布阵(CQD分治)的更多相关文章

  1. hdu1166敌兵布阵

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  2. hdu1166 敌兵布阵

    敌兵布阵 C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动 ...

  3. 线段树 HDU-1166 敌兵布阵

    敌兵布阵是一个线段树典题,题目如下(点此查看题目出处): Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国 ...

  4. HDU-1166敌兵布阵(线段树)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submissi ...

  5. hdu1166 敌兵布阵(线段树 求区间和 更新点)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  6. HDU1166 敌兵布阵_线段树

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  7. 线段树 - HDU1166 - 敌兵布阵

    2017-07-29 16:41:00 writer:pprp 线段树跟区间操作相关,想要在题目限定的时间内解决问题就需要用线段树这种数据结构来解决: 线段树是一种二叉平衡树 参考书目:张新华的< ...

  8. 线段树——hdu1166敌兵布阵

    一.题目回顾 题目链接:敌兵布阵 Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个 ...

  9. HDU1166 敌兵布阵(树状数组实现

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

随机推荐

  1. poi读取excel的辅助类

    补充:对于这个工具已经转为一个工程项目,采用的是saxreader方式,支持大数据文件的读取.具体可以参照  github上的源码,使用可以简单参照wiki.项目wiki地址https://git.o ...

  2. 视频SharePoint 2010 大局观 By 陈希章[zt]

    SharePoint 2010 大局观 By 陈希章 http://hi.baidu.com/jinzesudawei/item/9d0adace8cbcaf2c47d5c0fc

  3. [转]linux tcp/ip调优

    LINUX tcp/ip性能调优 On 2011年03月15日, in linux, tips, by netoearth 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接 ...

  4. Linux CentOS下安装Tomcat9

    本文讲解在Linux CentOS下安装Tomcat9,以及Web项目的部署发布. 环境:阿里云ECS 云服务器Linux CentOS 使用XShell客户端连接服务器,进行操作实践. 1.下载To ...

  5. TP5.1:将外部资源引入到框架中(css/js/font文件)

    为了让我们的框架形式变得更加好看,我们需要加入Bootstrap和Jq文件到框架中 1.通过Bootstrap和jq官网进行相关文件的下载 (1)Bootstrap下载地址:https://v3.bo ...

  6. css3弹性盒子

    CSS3 弹性盒子(Flex Box) 弹性盒子是 CSS3 的一种新的布局模式. CSS3 弹性盒( Flexible Box 或 flexbox),是一种当页面需要适应不同的屏幕大小以及设备类型时 ...

  7. Poj (3239),m皇后问题

    题目链接:http://poj.org/problem?id=3239 构造法很牛逼啊,把这个搜索的题直接变成了打表. 我用dfs写了一下. 构造法公式(序列):一.当n mod 6 != 2 或 n ...

  8. jade在命令行实时编译

    jade文件: doctype html html head title jade study body h1 imoock jade study 在jade文件夹下,终端输入 jade index. ...

  9. mac home brew install go

    mac利器home brew安装Go 首先你得需要安装home brew和ruby环境(因为home brew依赖ruby) 如果没有请自行到链接安装 准备好之后就开始安装go了 brew updat ...

  10. 使用QT开发GoogleMap瓦片显示和下载工具(1)——QT开发环境准备

    由于是第一次使用qt,光是QT的安装和调试就费了好大功夫,汗一个,下面记录下过程和遇到的问题的解决方法吧. 下载QT 直接Google搜索“QT”,进入官网http://qt-project.org/ ...