https://nanti.jisuanke.com/t/41298

题意:给一个n * n的螺旋矩阵,n保证是奇数,取一些点使其、获得价值,价值为数位和,然后再给q次查询,求矩阵中的价值总和

思路:首先这题由点的位置求权值是一个思维点,可以先求出点位于哪一层螺旋中,然后将该层螺旋的起点数值获取,推出所求点数值。离散化地将每个点加入数组,用0和1标记是价值点还是询问点,四个询问点属于一个询问,然后将点按y,x,flag地顺序排序,ans = map[x2][y2]− map[x2][y1−1]− map[x1−1][y2]+ map[x1−1][y1−1],将询问点的权值设为-1或1,就能实现上式的加或减。

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<stack>
#include<cstdlib>
#include<queue>
#include<set>
#include<string.h>
#include<vector>
#include<deque>
#include<map>
using namespace std;
#define INF 0x3f3f3f3f3f3f3f3f
#define inf 0x3f3f3f3f
#define eps 1e-4
#define bug printf("*********\n")
#define debug(x) cout<<#x"=["<<x<<"]" <<endl;
typedef long long LL;
typedef long long ll;
const int maxn = 1e6 + 5;
const int mod = 998244353; struct node{
int flag;
LL x,y,id;
LL val;
friend bool operator < (node a,node b) {
if(a.y == b.y) {
if(a.x == b.x) return a.flag < b.flag;
return a.x < b.x;
}
return a.y < b.y;
}
}p[maxn]; LL re_val(LL x) {
LL sum = 0;
while(x > 0) {
sum += x % 10;
x /= 10;
}
return sum;
}
LL index(LL y,LL x,LL n) { //求的n * n的矩阵中(x,y)的值是多少
LL mid = (n + 1) / 2;
LL p = max(abs(x - mid), abs(y - mid));
LL ans = n * n - (1 + p) * p * 4;
LL sx = mid + p, sy = mid + p;
if (x == sx && y == sy)
return ans;
else {
if (y == sy || x == sx - 2 * p)
return ans + abs(x - sx) + abs(y - sy);
else
return ans + 8 * p - abs(x - sx) - abs(y - sy);
}
} LL c[maxn],ans[maxn];
void init() {
memset(c,0,sizeof c);
memset(ans,0,sizeof ans);
}
LL lowbit(LL x) {
return x & -x;
}
LL sum(LL i) {
LL res = 0;
while(i) {
res += c[i];
i -= lowbit(i);
}
return res;
}
LL n; void add(LL i,LL t) {
while(i <= maxn) {
c[i] += t;
i += lowbit(i);
}
}
int main() {
int t;
scanf("%d",&t);
while(t--) {
init();
LL m,q;
scanf("%lld %lld %lld",&n,&m,&q);
int cnt = 0;
for(int i = 1;i <= m; i++) {
LL x,y;
scanf("%lld %lld",&x,&y);
p[++cnt] = {0, x, y, -1, re_val(index(x,y,n))};
}
for(int i = 1; i <= q; i++) {
LL x1,y1,x2,y2;
scanf("%lld %lld %lld %lld",&x1,&y1,&x2,&y2);
p[++cnt] = {1, x1 - 1, y1 - 1, i, 1};
p[++cnt] = {1, x1 - 1, y2, i, -1};
p[++cnt] = {1, x2, y1 - 1, i, -1};
p[++cnt] = {1, x2, y2, i, 1};
}
sort(p + 1, p + 1 + cnt);
for(int i = 1; i <= cnt; i++) {
if(p[i].flag == 1) ans[p[i].id] += sum(p[i].x) * p[i].val;
else add(p[i].x,p[i].val);
}
for(int i = 1; i <= q; i++)
printf("%lld\n",ans[i]);
}
}

2019南京网赛 The beautiful values of the palace(思维,树状数组的更多相关文章

  1. The Preliminary Contest for ICPC Asia Nanjing 2019 A The beautiful values of the palace(树状数组+思维)

    Here is a square matrix of n * nn∗n, each lattice has its value (nn must be odd), and the center val ...

  2. 2019icpc南京网络赛 A The beautiful values of the palace(离线+树状数组)

    题意: (假设所有的点对应的值已经求出)给你一个1e6*1e6的矩阵,有m<=1e5个点有值,其余都为0 q<=1e5个询问,求子矩阵的权值和 思路: 根据二维差分,对于询问左下角(x1, ...

  3. 2018牛客网暑假ACM多校训练赛(第五场)H subseq 树状数组

    原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round5-H.html 题目传送门 - https://www.no ...

  4. 2018牛客网暑假ACM多校训练赛(第五场)F take 树状数组,期望

    原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round5-F.html 题目传送门 - https://www.no ...

  5. 2019 Multi-University Training Contest 3 Find the answer (离散化+二分+树状数组)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6609 题目大意:给定一个含有n个数的序列,还有一个m,对于每个i(1<=i<=n)求出最少 ...

  6. 2019牛客多校第七场 F Energy stones 树状数组+算贡献转化模拟

    Energy stones 题意 有n块石头,每块有初始能量E[i],每秒石头会增长能量L[i],石头的能量上限是C[i],现有m次时刻,每次会把[s[i],t[i]]的石头的能量吸干,问最后得到了多 ...

  7. 2019牛客暑期多校训练营(第七场)F-Energy stones(思维+树状数组)

    >传送门< 题意:有n块能量石,每秒钟会增加Li的能量,但是一旦增长到了Ci它就不会增长了,它初始的能量为Ei. 现在有若干个时刻ti,会选择下标在[Si,Ti]的能量石吸取它们的能量,这 ...

  8. 2019牛客暑期多校训练营(第七场)E-Find the median(思维+树状数组+离散化+二分)

    >传送门< 题意:给n个操作,每次和 (1e9范围内)即往数组里面插所有 的所有数,求每次操作后的中位数思路:区间离散化然后二分答案,因为小于中位数的数字恰好有个,这显然具有单调性.那么问 ...

  9. 牛客网多校第5场 H subseq 【树状数组+离散化】

    题目:戳这里 学习博客:戳这里 题意:给n个数为a1~an,找到字典序第k小的序列,输出该序列所有数所在位置. 解题思路:先把所有序列预处理出来,方法是设一个数组为dp,dp[i]表示以i为开头的序列 ...

随机推荐

  1. Oracle-存储过程实现更改用户密码

    --调用存储过程实现更改DB用户密码 CREATE OR REPLACE PROCEDURE MODUSERPW(USER_NAME VARCHAR2,USER_PW VARCHAR2)ISSQLTX ...

  2. [CERC2016]:凸轮廓线Convex Contour(模拟+数学)

    题目描述 一些几何图形整齐地在一个网格图上从左往右排成一列.它们占据了连续的一段横行,每个位置恰好一个几何图形.每个图形是以下的三种之一:$1.$一个恰好充满单个格子的正方形.$2.$一个内切于单个格 ...

  3. Spring Boot 集成 Spring Security 使用自定义的安全数据源

    编写一个类自定义实现 UserDetailsService 接口 @Service("customUserDetailService") public class CustomUs ...

  4. HTML canvas中translate()与rotate()的理解

    首先,当我们在页面上初始化canvas时,相当于在上面放了一块画布,这块画布我们可以理解为上面有一个坐标系(如下图),左上角是原点,往右是X轴的正方向,往下是Y轴的正方向,我们在画布上绘制的内容都是基 ...

  5. vue中动态加载图片路径的方法

    assets:在项目编译的过程中会被webpack处理解析为模块依赖,只支持相对路径的形式,如< img src=”./logo.png”>和background:url(./logo.p ...

  6. db2查看当前用户模式及当前用户的权限

    1.连接数据库:db2 connect to appdb 2.查询当前用户模式:select current schema from sysibm.sysdummy1 或 select current ...

  7. ORACLE Physical Standby 级联备库搭建

    搭建oracle 级联DG 现有架构:physical standby 一主二备,在此基础上,在主库下新建备库standby3.级联备库cascade 数据库版本 11.2.0.4 db_name=p ...

  8. EDM营销应注意要定期发送邮件

    一个成熟的EDM营销方案应该要确定完整的邮件发送频率,并且严格按照计划执行.这点在EDM营销过程中非常重要,下面为大家分析一下. 一个EDM营销应该确定一下发送的时间,每月或者每周发送一次,这样用户能 ...

  9. .Net Core使用IConfiguration来处理Json文件

    前几天公司的用上了携程的开源配置中心:Apollo 然后同事给我提了这么个问题,因为之前的时候我们用的都是.NET Core自带的appsetting.json,为了兼容代码的目前工具类中用来进行配置 ...

  10. VMware 虚拟化编程(2) — 虚拟磁盘文件类型详解

    目录 目录 前文列表 虚拟磁盘文件 VMDK 用户可以创建的虚拟磁盘类型 VixDiskLib 中支持的虚拟磁盘类型 虚拟机文件类型 前文列表 VMware 虚拟化编程(1) - VMDK/VDDK/ ...