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分治总结(题目合集)相关推荐

  1. 珍宝鸭的力扣练习(7):分治法题目合集

    动态规划和分治法的区别 动态规划也是一种分治思想(比如其状态转移方程就是一种分治),但与分治算法不同的是,分治算法是把原问题分解为若干个子问题,自顶向下求解子问题,合并子问题的解,从而得到原问题的解. ...

  2. 20210325:力扣递归,回溯类型题目合集

    力扣递归,回溯类型题目合集 题目 思路与算法 代码实现 写在最后 题目 子集 2. 90. 子集 II 3. 40. 组合总和 II 4. 22. 括号生成 思路与算法 子集:注释的很详细,递归生成子 ...

  3. 20210322 :贪心思想力扣典型题目合集

    贪心思想力扣典型题目合集 写在前面 题目列表 思路分析 代码实现 写在前面 贪心的思想很多时候在于想到那个贪心的点上,而对徒手书写某些代码结构的能力并不做要求,个人认为需要的是你敏锐的意识到这个贪心的 ...

  4. 20210310 20210311 :栈、队列、堆类题目合集

    栈.队列.堆类题目合集 写在前面 题目列表 思路分析 代码实现 写在前面 栈.队列.堆基本的题目就是这些,需要特殊技巧的另算,重写一遍保证熟练掌握这些题目并且达到熟练使用的程度.记录以便后续再次学习. ...

  5. 高难度c语言编程题,高难度脑筋急转弯题目合集带答案

    脑筋急转弯,是指一些不能用惯性思维来回答的问题.经常玩这类游戏,可以锻炼人的发散思维以及应变能力,提高反应速度.今天给大家带来一些脑筋急转弯干货,希望可以帮助到有需要的同学! 高难度脑筋急转弯题目合集 ...

  6. 牛客网-精华专题-前端校招面试题目合集

    前端校招面试题目合集 501 HTML CSS 前端基础 HTML 浏览器页面有哪三层构成,分别是什么,作用是什么? 构成:结构层(structural layer).表示层(presentation ...

  7. 中高级面试题题目合集

    题目合集持续更新ing- 前端基础github地址.README.md可以下载到typora中打开,会有整个大纲目录显示(github中markdown目录快捷生成方式不现实,之后可能会想办法生成贴过 ...

  8. 团体程序设计天梯赛 L2 题目合集

    前言 发现自己还能再参加一次天梯赛,在高兴之余,决定把在赛前将所有的天梯赛真题过一遍,希望自己可以取得理想的成绩.目前 L1 的题目已经刷完,打算在赛前刷完 L2 的题目. 本来想 L2 的题目都写个 ...

  9. 【位运算】系列题目合集

    理论 位运算相关基础知识详见此篇 博客 例题 leetcode765. 情侣牵手 N 对情侣坐在连续排列的 2N 个座位上,想要牵到对方的手. 计算最少交换座位的次数,以便每对情侣可以并肩坐在一起. ...

最新文章

  1. pandas最大的时间间隔_pandas生成时间列表(某段连续时间或者固定间隔时间段)(示例代码)...
  2. Struts2漏洞导致的反弹shell——青藤云安全使用的是agent进程采集器进行检测
  3. zend frameword加载已有文件
  4. Linux基本命令之文件查找、检索
  5. 解决Win10 Virtualbox5.2.18桥接不能联网小记
  6. python每行输出30个字_python_30期【for循环】
  7. 一篇文章搞懂数据仓库:三范式与反范式
  8. oracle日期修改格式化,oracle日期格式化的实现
  9. Java编程:贪心算法
  10. android可以root的版本,Android8.0以上系统ROOT时,Magisk框架替代SpuerSU
  11. 斐波那契数列PHP非递归数组实现
  12. idea的黄色感叹号之Spring Configuration Check (Please configura/setup Spring facet for modules)
  13. 经典6位半HP34401A电路图
  14. 磁盘一把锁一个感叹号_Win10系统中如何解决磁盘图标上出现感叹号的情况
  15. 提高电脑运行速度--关闭电脑无用服务
  16. 《 QT5.9 c++ 开发指南》各种常见图表的绘制(一个例子让你不再担心表图的绘制)
  17. supermap三维地下管线
  18. 基于HDF的LED驱动程序开发(2)
  19. 蓝桥杯-BASIC12.字母图形
  20. COMO自动化测试系统:build过程记录

热门文章

  1. 免费申请6位QQ及其它骗术的真相(转自 黑客基地)
  2. python3的pip3安装【转载】
  3. 【 盒模型】css盒模型学习
  4. CoInitializeEx 与CoInitialize的区别
  5. 微信公众号登录授权(全网发布)一键绑定公众号设置教程及常见问题
  6. 手把手教你使用R语言建立COX回归并画出列线图(Nomogram)
  7. 做人最高的境界:知世故而不世故,依然热爱这个世界。
  8. 使用VS2019生成C#项目的exe文件和setup安装包(使用VS2019社区版)
  9. 【Java】锁的原理以及应用最详细教程
  10. 东财《财务管理X》综合作业