CDQ分治求前缀和
#include<bits/stdc++.h>
using namespace std;
const int N=;
int n,a_tot,q_tot,ans[N];
char s[];
struct query
{
int id,v,op;
bool operator < (const query &rhs)const
{
if(id==rhs.id) return op<rhs.op;
return id<rhs.id;
}
}query[N],tmp[N];
void init()
{
a_tot=; q_tot=;
memset(ans,,sizeof(ans));
}
void cdq(int l,int r)
{
if(l==r) return;
int m=(l+r)>>;
cdq(l,m); cdq(m+,r);
int p=l,q=m+,tot=,sum=;
while(p<=m && q<=r)
{
if(query[p]<query[q])
{
if(query[p].op==) sum+=query[p].v;
tmp[tot++]=query[p++];
}
else
{
if(query[q].op==) ans[query[q].v]+=sum;
else if(query[q].op==) ans[query[q].v]-=sum;
tmp[tot++]=query[q++];
}
}
while(p<=m) tmp[tot++]=query[p++];
while(q<=r)
{
if(query[q].op==) ans[query[q].v]+=sum;
else if(query[q].op==) ans[query[q].v]-=sum;
tmp[tot++]=query[q++];
}
for(int i=;i<tot;i++) query[i+l]=tmp[i];
}
int main()
{
int T; scanf("%d",&T);
for(int Case=;Case<=T;Case++)
{
init();
scanf("%d",&n);
for(int i=;i<=n;i++)
{
int g; scanf("%d",&g);
query[a_tot].op=;
query[a_tot].id=i;
query[a_tot++].v=g;
}
while(scanf("%s",&s)!=EOF)
{
if(s[]=='E') break;
if(s[]=='S' || s[]=='A')
{
int flag=,x,v;
if(s[]=='S') flag=-;
scanf("%d%d",&x,&v);
query[a_tot].id=x;
query[a_tot].v=flag*v;
query[a_tot++].op=;
}
else
{
int l,r; scanf("%d%d",&l,&r);
query[a_tot].id=l-;
query[a_tot].op=;
query[a_tot++].v=q_tot;
query[a_tot].id=r;
query[a_tot].op=;
query[a_tot++].v=q_tot;
q_tot++;
}
}
cdq(,a_tot-);
printf("Case %d:\n",Case);
for(int i=;i<q_tot;i++) printf("%d\n",ans[i]);
}
return ;
}
CDQ分治求前缀和的更多相关文章
- Educational Codeforces Round 41 967 E. Tufurama (CDQ分治 求 二维点数)
Educational Codeforces Round 41 (Rated for Div. 2) E. Tufurama (CDQ分治 求 二维点数) time limit per test 2 ...
- hdu5618(cdq分治求三维偏序)
题意:给n(n<=100000)个点,坐标为(xi,yi,zi)(1<=xi,yi,zi<=100000),定义一个点A比一个点B小,当且仅当xA<=xB,yA<=yB, ...
- CDQ分治求不知道多少维偏序 (持续更新 ]
求三维偏序的模板 : //Author : 15owzLy1 //luogu3810.cpp //2018 12 25 16:31:58 #include <cstdio> #includ ...
- BOI2007 Mokia | cdq分治求二维点数模板
题目链接:戳我 也没什么,其实主要就是为了存一个求二维坐标上矩形内点的个数的模板.为了之后咕咕咕地复习使用 不过需要注意的一点是,树状数组传x的时候可千万不要传0了!要不然会一直死循环的...qwqw ...
- SPOJ:Another Longest Increasing Subsequence Problem(CDQ分治求三维偏序)
Given a sequence of N pairs of integers, find the length of the longest increasing subsequence of it ...
- CDQ分治学习笔记(三维偏序题解)
首先肯定是要膜拜CDQ大佬的. 题目背景 这是一道模板题 可以使用bitset,CDQ分治,K-DTree等方式解决. 题目描述 有 nn 个元素,第 ii 个元素有 a_iai.b_ibi.c_ ...
- bzoj 2244 [SDOI2011]拦截导弹(DP+CDQ分治+BIT)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2244 [题意] 给定n个二元组,求出最长不上升子序列和各颗导弹被拦截的概率. [思路] ...
- [模板] CDQ分治&&BZOJ3262:陌上花开
简介 CDQ分治是分治的一种, 可以看做归并排序的扩展, 利用离线将一些 \(O(n)\) 的暴力优化到 \(O(log n)\). 它可以用来顶替一些高级(log)数据结构等. 一般地, CDQ分治 ...
- [luogu3810][bzoj3262]陌下花开【cdq分治】
题目描述 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),用三个整数表示.现在要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量.定义一朵花A比另一朵花B要美丽,当且仅Sa&g ...
随机推荐
- JAVA NIO 中的 zerocopy 技术提高IO性能
关于一篇更详细更好的介绍 ZeroCopy技术的文章,可参考:JAVA IO 以及 NIO 理解 这篇文章介绍了 zerocopy技术来提高Linux平台上的IO密集型的JAVA应用程序的性能. ze ...
- Linux配置Tomcat步骤mv apache-tomcat-7.0.82 tomcat
(一)安装JAVA1.检查java环境 java -version,不存在安装.2.yum -y list java* Loaded plugins: fastestmirror, langpacks ...
- Java基础编程题——水仙花数
package com.yangzl.basic; /** * 题目:打印出所有的"水仙花数". * 所谓"水仙花数"是指一个三位数, * 其各位数字立方和等于 ...
- 把ui界面加入到工程中
第一步 from untitled import Ui_Form untitled是ui转化成py的文件名:Ui_Form是转换后的类名 第二步 把Ui_Form做为工程的父类 class ...
- pt-table-checksum检测不出主从差异处理
几个月前写过pt-table-checksum 3.0.4检测不出主从差异数据,当时的解决方案是使用旧版本,另一个挫方法是自行设置binlog_format='STATEMENT'.现在已经发布到3. ...
- 2017/05/02 java 基础 随笔
1.PrtSc键是截屏键 打开画图软件 ctrl+v就可以复制到 2.win7以上可以 在当前目录下shift+右键 3.junit和javaweb应用的main函数在哪里? java程序跑起 ...
- HTML学习笔记04-样式
HTML<style>属性 style属性的作用: 提供了一种改变所有HTML元素样式的通用方法 background-colco属性为元素定义了背景颜色: <!DOCTYPE HT ...
- C# 实现UDP打洞通信(一)
最近研究了一下网络打洞的相关技术,TCP的方式据说可行性不高,各种困难,因此决定采用UDP(UDP是什么就不解释了)的方式. 原理: 我们都知道局域网内的主机想要访问外网的服务器是比较容易的,比如浏览 ...
- log4j2配置文件log4j2.xml
原地址:https://www.cnblogs.com/hafiz/p/6170702.html 1.关于配置文件的名称以及在项目中的存放位置 log4j 2.x版本不再支持像1.x中的.proper ...
- position:absolute在IE8浏览器下无法显示正确位置
在网页head下添加 <meta http-equiv="x-ua-compatible" content="ie=8" />