[Hdu1166]敌兵布阵(CQD分治)
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分治)的更多相关文章
- hdu1166敌兵布阵
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- hdu1166 敌兵布阵
敌兵布阵 C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动 ...
- 线段树 HDU-1166 敌兵布阵
敌兵布阵是一个线段树典题,题目如下(点此查看题目出处): Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国 ...
- HDU-1166敌兵布阵(线段树)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submissi ...
- hdu1166 敌兵布阵(线段树 求区间和 更新点)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- HDU1166 敌兵布阵_线段树
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- 线段树 - HDU1166 - 敌兵布阵
2017-07-29 16:41:00 writer:pprp 线段树跟区间操作相关,想要在题目限定的时间内解决问题就需要用线段树这种数据结构来解决: 线段树是一种二叉平衡树 参考书目:张新华的< ...
- 线段树——hdu1166敌兵布阵
一.题目回顾 题目链接:敌兵布阵 Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个 ...
- HDU1166 敌兵布阵(树状数组实现
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
随机推荐
- position的参考基准
static(静态):position默认的样式:占据标准流的位置, 它会忽略top.bottom.left . right 的设置 relative(相对): 占据标准流的位置:可将其移至相对于其正 ...
- 在Centos7中安装Docker并实例化Mysql
首先 本文是一篇安装流程,从初始的Centos7安装Docker后实例化一个Mysql的整个流程,其中会包含一些需要注意的疑点和坑. 实例化的Mysql是将数据和配置保存在宿主机. 注意,在安装Doc ...
- canvas制作倒计时炫丽效果
<!DOCTYPE html> <head> <title>canvas倒计时</title> <style> .canvas{ displ ...
- (七)JavaScript之[调试]与[前端表单验证]
12].调试为什么要去调试?1.在编写JavaScript时,如果没有调试工具将是一件很痛苦的事情.2.没有调试工具是很难去编写JavaScript程序的.3.编写的代码可能包含语法错误.逻辑错误,如 ...
- JS的定时到底有多不准
博客逐步迁移到,独立博客,原文地址,http://www.woniubi.cn/js_hide_tab_setinterval/ 我们一直都在说,JS的定时非常的不准确,但是很少有人去验证他,今天我就 ...
- Oracle的oci.dll加载错误解决办法
开始 -> 程序 -> Oracle -> Configuration and Migration Tools -> Net Manager→本地→概要文件→Oracle高级安 ...
- hibernate 初印象
将要学习的内容: 1.HelloWorld a) xml b) annotation2.Hibernate 原理模拟 - 什么是 O/R Mapping 以及为什么要有 O/RMapping3.常见 ...
- 怎样解决putty终端乱码的方法
原文地址:https://jingyan.baidu.com/article/3aed632e5f00ae701080913a.html?qq-pf-to=pcqq.c2c 终端输入:echo $LA ...
- PHP使用MySQL报no such file or directory
原因是没有连接数据库.加上下面代码: $link = mysql_connect(DB_HOST,DB_USER,DB_PWD);mysql_select_db(DB_NAME) or die('Co ...
- QT5中两个窗体之间传递信息(值)
一个窗体A调用另一个窗体B: 1)包含窗体B的头文件#include"B.h" 2)在窗体A中增加slots函数: public slots: void infoRecv(QStr ...