传送门

拿个二维偏序练练cdq板子,其实就和归并排序差不多,复杂度不太会,似乎nlogn?。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib> using namespace std;
const int MAXN = ;
const int MAXQ = MAXN*;
typedef long long LL; inline LL rd(){
LL x=,f=;char ch=getchar();
while(!isdigit(ch)) {f=ch=='-'?:;ch=getchar();}
while(isdigit(ch)) {x=(x<<)+(x<<)+ch-'';ch=getchar();}
return f?x:-x;
} int n,m,cnt,num;
LL ans[MAXN]; struct Query{
int type,id;LL val;
friend bool operator<(const Query A,const Query B){
return A.id==B.id?A.type<B.type:A.id<B.id;
}
}q[MAXQ],tmp[MAXQ]; void cdq(int l,int r){
if(l==r) return;
int mid=l+r>>;cdq(l,mid),cdq(mid+,r);
int L=l,R=mid+;LL sum=;int o=;
while(L<=mid && R<=r){
if(q[L]<q[R]){
if(q[L].type==) sum+=q[L].val;
tmp[++o]=q[L++];
}
else{
if(q[R].type==) ans[q[R].val]-=sum;
else if(q[R].type==) ans[q[R].val]+=sum;
tmp[++o]=q[R++];
}
}
while(L<=mid) tmp[++o]=q[L++];
while(R<=r) {
if(q[R].type==) ans[q[R].val]-=sum;
else if(q[R].type==) ans[q[R].val]+=sum;
tmp[++o]=q[R++];
}
for(int i=;i<=o;i++) q[i+l-]=tmp[i];
} int main(){
n=rd(),m=rd();
for(int i=;i<=n;i++)
q[++cnt].id=i,q[cnt].type=,q[cnt].val=rd();
for(int i=;i<=m;i++){
q[++cnt].type=rd();
if(q[cnt].type==) q[cnt].id=rd(),q[cnt].val=rd();
else{
q[cnt].id=rd()-;q[cnt].val=++num;
q[++cnt].type=;q[cnt].id=rd();q[cnt].val=num;
}
}
// cout<<" "<<endl;
// for(int i=1;i<=cnt;i++) {
// cout<<q[i].type<<" "<<q[i].id<<" "<<q[i].val<<endl;
// }
cdq(,cnt);
for(int i=;i<=num;i++) printf("%lld\n",ans[i]);
return ;
}

LUGOU P3374 【模板】树状数组 1(CDQ 分治)的更多相关文章

  1. 洛谷.3374.[模板]树状数组1(CDQ分治)

    题目链接 简易CDQ分治教程 //每个操作分解为一个有序数对(t,p),即(时间,操作位置),时间默认有序,用CDQ分治处理第二维 //对于位置相同的操作 修改优先于查询 //时间是默认有序的 所以可 ...

  2. 【 HDU - 4456 】Crowd (二维树状数组、cdq分治)

    BUPT2017 wintertraining(15) #5A HDU 4456 题意 给你一个n行n列的格子,一开始每个格子值都是0.有M个操作,p=1为第一种操作,给格子(x,y)增加z.p=2为 ...

  3. [模板] 树状数组 (C++ class)

    闲来无事(其实是打了两三道树状数组题),写了个树状数组模板…… /* Author: hotwords */ template<typename tp> class BinTree { p ...

  4. HDU 1166 线段树模板&树状数组模板

    HDU1166 上好的线段树模板&&树状数组模板 自己写的第一棵线段树&第一棵树状数组 莫名的兴奋 线段树: #include <cstdio> using nam ...

  5. 【洛谷 p3374】模板-树状数组 1(数据结构)

    题目:已知一个数列,你需要进行下面两种操作:1.将某一个数加上x:2.求出某区间每一个数的和. 解法:树状数组求前缀和. #include<cstdio> #include<cstd ...

  6. 【洛谷 p3368】模板-树状数组 2(数据结构)

    题目:已知一个数列,你需要进行下面两种操作:1.将某区间每一个数数加上x:2.求出某一个数的和. 解法:树状数组+前缀和优化.数组中每位存和前一位的数的差,这样区间修改只用改两位,单点询问就是求前缀和 ...

  7. POJ2299逆序对模板(树状数组)

    题目:http://poj.org/problem?id=2299 只能相邻两个交换,所以交换一次只会减少一个逆序对.所以交换次数就是逆序对数. ps:原来树状数组还可以记录后边lowbit位的部分和 ...

  8. POJ1195Mobile phones (从二维树状数组到cdq分治)

    Suppose that the fourth generation mobile phone base stations in the Tampere area operate as follows ...

  9. BZOJ 2738 子矩阵第k大 | 二维树状数组 整体二分 分治

    BZOJ 2738 "矩阵乘法"(子矩阵第k大) 题意 给出一个矩阵,多次询问子矩阵中第k大的数是多少. 题解 我做这道题之前先照着这道题出了一道题,是这道题的一维版本,在这里:h ...

随机推荐

  1. pycharm中使用配置好的virtualenv环境,自动生成和安装requirements.txt依赖

    1.手动建立: 第一步 建立虚拟环境 Windows cmd: pip install virtualenv 创建虚拟环境目录 env 激活虚拟环境 C:\Python27\Scripts\env\S ...

  2. Windows便筏快捷键

    Ctrl + L:左对齐 Ctrl + E:居中对齐 Ctrl + R:右对齐 Ctrl + B:加粗 Ctrl + I:斜体 Ctrl + U:给文字添加下划线 Ctrl + T: 给文字添加删除线 ...

  3. 在VC中使用WebBrowser控件的两方法

    ClassWizard方式: 1.创建包装类:View->ClassWizard->Add Class->Form a Type Library->C:/winnt/syste ...

  4. 软件-开发软件:Android Studio

    ylbtech-软件-开发软件:Android Studio Android Studio 是谷歌推出的一个Android集成开发工具,基于IntelliJ IDEA. 类似 Eclipse ADT, ...

  5. 同步+TASK异步请求

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  6. day3:python运算符及数据类型(str)(int)

    运算符 算数运算 :a = 10 * 10赋值运算:a = a + 1 a+=1 比较运算:a = 1 > 5 逻辑运算: a = 1>6 or 1==1   a = 1 and b = ...

  7. POJ 2954 /// 皮克定理+叉积求三角形面积

    题目大意: 给定三角形的三点坐标 判断在其内部包含多少个整点 题解及讲解 皮克定理 多边形面积s = 其内部整点in + 其边上整点li / 2 - 1 那么求内部整点就是 in = s + 1 - ...

  8. neo4j中cypher语句多个模糊查询

    总结一下经验: neo4j中,cypher语句的模糊查询,好像是个正则表达式结构. 对于一个属性的多个模糊查询,可以使用如下写法: 比如,查询N类型中,属性attr包含'a1'或者'a2'的所有节点. ...

  9. springcloud Finchley 版本hystrix 和 hystrix Dashboard

    hystrix的断路功能 引用上个项目,创建新的model ,cloud-hystrix pom.xml <?xml version="1.0" encoding=" ...

  10. 自定义Jquery:ajax,get,post方法

    var myAjax = { request: function(url, type, data, callback) { $.ajax(url, { type: type, data: data, ...