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 ...
随机推荐
- sock_ntop.c
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <netinet/in ...
- MySql Workbench导出ER图并存为PDF文件
一.登陆数据库 二.点击Database => Reverse Engineer 三.填入登陆信息后next => next,选择要生成ER模型的数据库 四.点击next => n ...
- Python - Scrapy 框架
Scrapy 是采用Python 开发的一个快速可扩展的抓取WEB 站点内容的爬虫框架.Scrapy,Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构 ...
- springboot项目使用idea开启远程调试
远程调试是调试服务器的有效手段,远程服务器运行的应用可以在本地代码中打断点调试,能让开发人员准确定位服务器上的问题. 一.开启远程调试前提:本地代码与服务器代码一致, 二.开启远程调试步骤 1.开发工 ...
- POJ1287 Networking【最小生成树】
题意: 给出n个节点,再有m条边,这m条边代表从a节点到b节点电缆的长度,现在要你将所有节点都连起来,并且使长度最小 思路: 这是个标准的最小生成树的问题,用prim的时候需要注意的是他有重边,取边最 ...
- ubuntu16.04+anaconda的安装+解决conda不可用(配置路径)+卸载
首先一点,之前我一直自己安装python,然后直接在python环境下再安装第三方库,但自从另一台电脑重装系统之后,我当时在没有python的情况下直接安装的anaconda,觉得她超级好用(所以如果 ...
- jquery中选择checkbox拼接成字符串,然后到后台拆分取值
jquery中选择checkbox拼接成字符串,然后到后台拆分取值 js中的代码 $("#btn").click(function(){ var chenked=$("i ...
- mysql中把一个表的数据批量导入另一个表中
mysql中把一个表的数据批量导入另一个表中 不管是在网站开发还是在应用程序开发中,我们经常会碰到需要将MySQL或MS SQLServer某个表的数据批量导入到另一个表的情况,甚至有时还需要指定 ...
- Levmar 配置
Levmar配置 原文有些错误,在我的博客里已经改好了:http://blog.sina.com.cn/s/blog_45b747f70101he1t.html 如果6或者7自由度机器人的运动学逆解无 ...
- 如何交叉编译 linux kernel 内核
Compilation We first need to move the config file by running cp arch/arm/configs/bcmrpi_cutdown_defc ...