cdq分治总结(题目合集)
1、The Preliminary Contest for ICPC Asia Nanjing 2019 A. The beautiful values of the palace
题意:给出一个n*n(n为奇数)的蛇形矩阵,将其中的m个点的值改为各位数之后,给出p组询问,查询子矩阵的和(必须是m个点集中的点,其他的点可看成值为0)。
分析:数组求和或者矩阵求和,一般树状数组和线段树就可以做,这里用cdq分治写的。和子矩阵修改,子矩阵求和那题几乎是一样的。cdq分治总结可以参考https://www.cnblogs.com/Parsnip/p/10816330.html。
代码:
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N=1e6+5,M=800020;
int n,m,cnt,tot,ans[M];
struct BIT
{int p[N];inline int lowbit(int x){return x&(-x);}inline void insert(int pos,int val){for (;pos<=n;pos+=lowbit(pos))p[pos] += val;}inline int query(int pos){int res = 0;for (;pos;pos-=lowbit(pos))res += p[pos];return res;}inline void cl() {memset(p,0,sizeof(p));}
}tree;
struct order
{int flag,x,y,val;bool operator < (order p){if ( x ^ p.x ) return x < p.x;if ( y ^ p.y ) return y < p.y;return flag < p.flag;}
}a[M],cur[M];int get(int x,int y)
{ll ans = 0,sum = 0;ll t = max(abs(x-(n+1)/2),abs(y-(n+1)/2));sum = 1LL*n*n - (2*t+1)*(2*t+1);if(x>=y) sum += abs((n+1)/2+t-x)+abs((n+1)/2+t-y)+1;else sum += 2*(2*t+1)-1+abs((n+1)/2-t-x)+abs((n+1)/2-t-y);while(sum)ans+=sum%10,sum/=10;return ans;
}inline void cdq(int l,int r)
{if ( l == r ) return;int mid = l+r >> 1 , p = l , q = mid+1 , t = l-1;cdq(l,mid); cdq(mid+1,r);while ( p <= mid && q <= r ){if ( a[p] < a[q] ){if ( a[p].flag == 1 ) tree.insert(a[p].y,a[p].val);cur[++t] = a[p++];}else{if ( a[q].flag == 2 ) ans[ a[q].val ] += tree.query(a[q].y);if ( a[q].flag == 3 ) ans[ a[q].val ] -= tree.query(a[q].y);cur[++t] = a[q++];}}while ( q <= r ){if ( a[q].flag == 2 ) ans[ a[q].val ] += tree.query(a[q].y);if ( a[q].flag == 3 ) ans[ a[q].val ] -= tree.query(a[q].y);cur[++t] = a[q++];}for (int i=l;i<p;i++)if ( a[i].flag == 1 )tree.insert(a[i].y,-a[i].val);while ( p <= mid ) cur[++t] = a[p++];for (int i=l;i<=r;i++) a[i] = cur[i];
}int T,p;
inline void input() {scanf("%d",&T);while(T--) {cnt = 0;tot = 0;tree.cl();memset(ans,0,sizeof(ans));scanf("%d%d%d",&n,&m,&p);for(int i=1;i<=m;i++) {int x,y;scanf("%d%d",&x,&y);int val = get(x,y);a[++cnt] = (order){1,x,y,val};}for(int i=1;i<=p;i++) {int x1,y1,x2,y2;scanf("%d%d%d%d",&x1,&y1,&x2,&y2);a[++cnt] = (order){2,x2,y2,++tot};a[++cnt] = (order){2,x1-1,y1-1,tot};a[++cnt] = (order){3,x1-1,y2,tot};a[++cnt] = (order){3,x2,y1-1,tot};}cdq(1,cnt);for (int i=1;i<=tot;i++)printf("%d\n",ans[i]);}
}int main(void) {input();return 0;
}
cdq分治总结(题目合集)相关推荐
- 珍宝鸭的力扣练习(7):分治法题目合集
动态规划和分治法的区别 动态规划也是一种分治思想(比如其状态转移方程就是一种分治),但与分治算法不同的是,分治算法是把原问题分解为若干个子问题,自顶向下求解子问题,合并子问题的解,从而得到原问题的解. ...
- 20210325:力扣递归,回溯类型题目合集
力扣递归,回溯类型题目合集 题目 思路与算法 代码实现 写在最后 题目 子集 2. 90. 子集 II 3. 40. 组合总和 II 4. 22. 括号生成 思路与算法 子集:注释的很详细,递归生成子 ...
- 20210322 :贪心思想力扣典型题目合集
贪心思想力扣典型题目合集 写在前面 题目列表 思路分析 代码实现 写在前面 贪心的思想很多时候在于想到那个贪心的点上,而对徒手书写某些代码结构的能力并不做要求,个人认为需要的是你敏锐的意识到这个贪心的 ...
- 20210310 20210311 :栈、队列、堆类题目合集
栈.队列.堆类题目合集 写在前面 题目列表 思路分析 代码实现 写在前面 栈.队列.堆基本的题目就是这些,需要特殊技巧的另算,重写一遍保证熟练掌握这些题目并且达到熟练使用的程度.记录以便后续再次学习. ...
- 高难度c语言编程题,高难度脑筋急转弯题目合集带答案
脑筋急转弯,是指一些不能用惯性思维来回答的问题.经常玩这类游戏,可以锻炼人的发散思维以及应变能力,提高反应速度.今天给大家带来一些脑筋急转弯干货,希望可以帮助到有需要的同学! 高难度脑筋急转弯题目合集 ...
- 牛客网-精华专题-前端校招面试题目合集
前端校招面试题目合集 501 HTML CSS 前端基础 HTML 浏览器页面有哪三层构成,分别是什么,作用是什么? 构成:结构层(structural layer).表示层(presentation ...
- 中高级面试题题目合集
题目合集持续更新ing- 前端基础github地址.README.md可以下载到typora中打开,会有整个大纲目录显示(github中markdown目录快捷生成方式不现实,之后可能会想办法生成贴过 ...
- 团体程序设计天梯赛 L2 题目合集
前言 发现自己还能再参加一次天梯赛,在高兴之余,决定把在赛前将所有的天梯赛真题过一遍,希望自己可以取得理想的成绩.目前 L1 的题目已经刷完,打算在赛前刷完 L2 的题目. 本来想 L2 的题目都写个 ...
- 【位运算】系列题目合集
理论 位运算相关基础知识详见此篇 博客 例题 leetcode765. 情侣牵手 N 对情侣坐在连续排列的 2N 个座位上,想要牵到对方的手. 计算最少交换座位的次数,以便每对情侣可以并肩坐在一起. ...
最新文章
- pandas最大的时间间隔_pandas生成时间列表(某段连续时间或者固定间隔时间段)(示例代码)...
- Struts2漏洞导致的反弹shell——青藤云安全使用的是agent进程采集器进行检测
- zend frameword加载已有文件
- Linux基本命令之文件查找、检索
- 解决Win10 Virtualbox5.2.18桥接不能联网小记
- python每行输出30个字_python_30期【for循环】
- 一篇文章搞懂数据仓库:三范式与反范式
- oracle日期修改格式化,oracle日期格式化的实现
- Java编程:贪心算法
- android可以root的版本,Android8.0以上系统ROOT时,Magisk框架替代SpuerSU
- 斐波那契数列PHP非递归数组实现
- idea的黄色感叹号之Spring Configuration Check (Please configura/setup Spring facet for modules)
- 经典6位半HP34401A电路图
- 磁盘一把锁一个感叹号_Win10系统中如何解决磁盘图标上出现感叹号的情况
- 提高电脑运行速度--关闭电脑无用服务
- 《 QT5.9 c++ 开发指南》各种常见图表的绘制(一个例子让你不再担心表图的绘制)
- supermap三维地下管线
- 基于HDF的LED驱动程序开发(2)
- 蓝桥杯-BASIC12.字母图形
- COMO自动化测试系统:build过程记录