博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CDQ分治
阅读量:4695 次
发布时间:2019-06-09

本文共 1917 字,大约阅读时间需要 6 分钟。

题目描述

如题,已知一个数列,你需要进行下面两种操作:

1.将某一个数加上x

2.求出某区间每一个数的和

输入格式

第一行包含两个整数N、M,分别表示该数列数字的个数和操作的总个数。

第二行包含N个用空格分隔的整数,其中第i个数字表示数列第i项的初始值。

接下来M行每行包含3个整数,表示一个操作,具体如下:

操作1: 格式:1 x k 含义:将第x个数加上k

操作2: 格式:2 x y 含义:输出区间[x,y]内每个数的和

代码

#include
using namespace std;前提是可以离线查询,也就是先询问然后最后统一输出答案 主要用了分治的思想,先对子区间进行求解,然后合并的时候计算左区间对右区间的贡献最后就可以得出答案了 #define sc scanf#define pr printf#define rep(i,x,y) for(int i = x;i <= y;i++)#define rvp(i,x,y) for(int i = y;i >= x;i--)int tot = 0,cnt = 0;typedef long long ll;const int N = 5e5 + 10;ll ans[N];struct node{ int id,type; ll va; bool operator < (const node &a) const { if(id != a.id) return id < a.id; else return type < a.type; }}; node A[N*4],B[N*4];void CDQ(int l,int r){ if(l==r) return; int m = (l+r) >> 1; CDQ(l,m); CDQ(m+1,r); int p1 = l,p2 = m+1; ll sum = 0; rep(i,l,r) { if(p2 > r || p1 <= m && A[p1] < A[p2]) { if(A[p1].type == 1) sum += A[p1].va;//计算左区间对右区间的贡献 B[i] = A[p1++]; } else{ //类似前缀和的思想 if(A[p2].type == 2) ans[A[p2].va] -= sum; else if(A[p2].type == 3) ans[A[p2].va] += sum; B[i] = A[p2++]; } } rep(i,l,r) A[i] = B[i];}int main(){ int n,m; sc("%d%d",&n,&m); rep(i,1,n) { tot++; A[tot].id = i; A[tot].type = 1; sc("%lld",&A[tot].va); } rep(i,1,m) { tot++; int op; sc("%d",&op); if(op==1){ A[tot].type = op; sc("%d%lld",&A[tot].id,&A[tot].va); } else{ int l,r; sc("%d%d",&l,&r); cnt++; A[tot].type = 2; A[tot].va = cnt; A[tot].id = l - 1; tot++; A[tot].type = 3; A[tot].va = cnt; A[tot].id = r; } } CDQ(1,tot); rep(i,1,cnt) pr("%lld\n",ans[i]); return 0;}

转载于:https://www.cnblogs.com/mch5201314/p/11345827.html

你可能感兴趣的文章
体验课:开启算法之旅
查看>>
17.28搭建项目开发环境
查看>>
day38 07-Spring框架Bean的时候方式
查看>>
day39-Spring 13-Spring的JDBC模板:默认连接池的配置
查看>>
hdu 2058 The sum problem
查看>>
[wp7游戏]wp7~~X-Box Live游戏~~集合贴~~
查看>>
Access 标准表达式中数据类型不匹配问题
查看>>
Python实现屏幕截图
查看>>
【Python求助】在eclipse和pycharm中,通过adb install安装中文名字APK时老是报错,如何解决...
查看>>
用weka来做Logistic Regression
查看>>
Linux现学现用之Top命令
查看>>
[C3W1] Structuring Machine Learning Projects - ML Strategy 1
查看>>
【原创】谈谈服务雪崩、降级与熔断
查看>>
Java加密代码 转换成Net版
查看>>
jquery.validation.js 使用
查看>>
day38 mycql 初识概念,库(增删改查),表(增删改)以及表字段(增删改查),插入更新操作...
查看>>
数据库高级查询
查看>>
C语言实现封装、继承和多态
查看>>
Linux字符设备驱动框架(二):Linux内核的LED设备驱动框架
查看>>
创建文件
查看>>