2019ICPC南京网络赛A The beautiful values of the palace
题意:蛇形填数超大版本,需要求出一些给定坐标的值的数位和,然后q次询问,一个矩形区域内值的和是多少
解题思路:二维偏序前缀和的经典题
二维偏序:求(x,y)左下角点的个数,思路是对x,y升序排序,用树状数组维护每个纵坐标y已经出现的次数,这样我们动态地将点的纵坐标y加入树状数组,然后求出比y小的有多少个(树状数组求和)即可知道当前点的二维偏序值了
要求前缀和,我们只需把维护点的个数改为点权即可。
这个题,首先按照蛇形填数的规律求出点权,然后就是求二维偏序前缀和了,有了前缀和我们将可以快速得到子矩阵区域的和了(联想矩阵O(1)查询子矩阵的方法),首先我们要将询问离线,然后把涉及到的点全部存入数组后排序,存储的时候可以采取一些小技巧标记出带权值的点和要求的矩形边界的点,当处理到带权点时,我们加入树桩数组,处理到矩形边界点时,查询一次前缀和,然后计入ans[id],id为询问的时间点,这个题的纵坐标y在1e6以内,因此无需离散化,直接开1e6的树状数组是最佳选择,题目具体细节见代码与注释
AC(补题)代码:
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e6+;
typedef long long ll;
struct node
{
int x,y,val,id;
friend bool operator<(const node &a,const node &b)
{
if(a.x!=b.x)return a.x<b.x;
if(a.y!=b.y)return a.y<b.y;
return a.id<b.id;//保证先加入要求和的点值,再加入矩形的边界点,边界点有询问顺序的编号而带值点id=0
}
}p[maxn];
int n;
int getval(int x,int y)
{
x=n+-x;
y=n+-y;
ll ans;
ll mi=min(x,min(y,min(n-x+,n-y+)));
if(x<=y) ans=1ll*mi*(1ll**(n-)-*mi)+1ll**mi-*n-+x+y;
else ans=1ll*mi*(*n-*mi)+1ll**mi+-x-y;//模拟过程
int tot=;
while (ans)
{
tot+=ans%;
ans/=;
}
return tot;
}
int tree[maxn];//1e6无需离散化
inline int lowbit(int x){ return x&-x;}
void add(int pos,int val)
{
while (pos<=n)
{
tree[pos]+=val;
pos+=lowbit(pos);
}
}
ll query(int pos)
{
ll res=;
while (pos>)
{
res+=tree[pos];
pos-=lowbit(pos);
}
return res;
}
ll ans[maxn];
int main()
{
ios::sync_with_stdio(false);
cin.tie();
cout.tie();
int T,m,q,x1,y1,x2,y2;
cin>>T;
while (T--)
{
cin>>n>>m>>q;
memset(tree,, sizeof(tree));
for(int i=;i<=m;i++)
{
cin>>p[i].x>>p[i].y;
p[i].val=getval(p[i].x,p[i].y);
p[i].id=;
}
int len=m;
for(int i=;i<=q;i++)
{
ans[i]=;
cin>>x1>>y1>>x2>>y2;
p[++len].x=x1-;p[len].y=y1-;p[len].id=i;p[len].val=;
p[++len].x=x2;p[len].y=y2;p[len].id=i;p[len].val=;
p[++len].x=x1-;p[len].y=y2;p[len].id=i;p[len].val=-;
p[++len].x=x2;p[len].y=y1-;p[len].id=i;p[len].val=-;
}
sort(p+,p+len+); for(int i=;i<=len;i++)
{
if(p[i].id)//如果是矩形边界点则计算答案
{
ans[p[i].id]+=1ll*query(p[i].y)*p[i].val;//矩形边界点val的意义是标记ans[id]是加上当前前缀和还是减去当前前缀和
}
else add(p[i].y,p[i].val);
}
for(int i=;i<=q;i++)cout<<ans[i]<<'\n';
}
return ;
}
2019ICPC南京网络赛A The beautiful values of the palace的更多相关文章
- 2019icpc南京网络赛 A The beautiful values of the palace(离线+树状数组)
题意: (假设所有的点对应的值已经求出)给你一个1e6*1e6的矩阵,有m<=1e5个点有值,其余都为0 q<=1e5个询问,求子矩阵的权值和 思路: 根据二维差分,对于询问左下角(x1, ...
- 2019ICPC南京网络赛A题 The beautiful values of the palace(三维偏序)
2019ICPC南京网络赛A题 The beautiful values of the palace https://nanti.jisuanke.com/t/41298 Here is a squa ...
- 2019icpc南京网络赛_F_Greedy Sequence
题意 题意不明,队友告诉我对于每个\(i\),所在下标\(p[i]\),在\([p[i]-k,p[i]+k]\)中找到小于\(i\)的最大数\(x\),然后\(ans[i]=ans[x]+1\)即可. ...
- 2019ICPC南京网络赛B super_log——扩展欧拉定理
题目 设函数 $$log_a*(x) = \begin{cases}-1, & \text{ if } x < 1 \\ 1+log_a*(log_ax) & \text{ if ...
- 2019icpc南京网络赛
B. super_log(扩展欧拉函数) 题意:求aa...(b个a)模M的值. 思路:递归用欧拉函数求解,我们知道欧拉降幂公式: 如果讨论b和φ(p)的关系会很麻烦,网上证明了一种精妙的方法,只需重 ...
- 2019icpc南京网络赛 A 主席树
题意 给一个\(n\times n\)的螺旋矩阵,给出其中的\(m\)个点的值分别为各个点上数字的数位之和,给出\(q\)个询问,每次询问从\((x1,y1)\)到\((x2,y2)\)的子矩阵的和. ...
- 2019icpc南京网络赛 F 主席树
题意 给一个\(n\)的全排列数组\(a\),求一个递推数组每一项的值:\(ans[i]=ans[j]+1\),\(j\)为\(a[pos[i]-k]到a[pos[i]+k],(pos[i]为i在数组 ...
- 2019ICPC南京网络赛总结
这次是在学校打的,总体不算好,过两题校排200多..很惨. 开场一段时间没人过题,但是很多人交I, 我也就再看,看着看着发现不可做,这时候转F,花了半天读懂题意的时候想到主席树查找.但是主席树这种查找 ...
- 2019ICPC南京网络赛F Greedy Sequence
题意:对于1<=i<=n每次找到(pos[i]-k,pos[i]+k)内不大于i的最大那个数,ans[i]=ans[mx]+1,若ans[mx]未知则递归处理ans[mx] PS:这个题比 ...
随机推荐
- git操作的日常用法
参考博客: https://blog.csdn.net/afei__/article/details/51567155# 最近一段时间总结一些git在个人日常开发当中用到的方法, 并记录下来, 同时 ...
- 哈希表(hash)详解
哈希表结构讲解: 哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构.也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度. ...
- Windows7下移植Qt4.8.4项目到QT5.2上时遇到的一些问题
最近在Windows7下将Qt4.8.4+MSVC2008的项目移植到QT5.2下时,遇到了一些小问题: 问题一:错误:C1083: 无法打开包括文件:"QApplication&q ...
- (1.3)学习笔记之mysql体系结构(C/S整体架构、内存结构、物理存储结构、逻辑结构)
目录 1.学习笔记之mysql体系结构(C/S架构) 2.mysql整体架构 3.存储引擎 4.sql语句处理--SQL层(内存层) 5.服务器内存结构 6.mysql如何使用磁盘空间 7.mysql ...
- 洛谷 P4178 Tree
#include<iostream> #include<cstdlib> #include<cstdio> #include<cmath> #inclu ...
- docker--环境搭建
我的电脑是win10,虽然现在win10开始也支持docker,但在linux机器会合适些,所以我先用VMware创建一个linux虚拟机--Centos7 安装虚拟机不多说,现在开始安装docker ...
- myEclipse 搭建 Spring boot+myBatis+maven 项目流程
1.新建一个工程 new-->maven project-->next-->next-->在filter中搜索webapp-->group id.Artifact id- ...
- JS window对象 userAgent 返回用户代理头的字符串表示(就是包括浏览器版本信息等的字符串) 语法 navigator.userAgent
userAgent 返回用户代理头的字符串表示(就是包括浏览器版本信息等的字符串) 语法 navigator.userAgent 几种浏览的user_agent.,像360的兼容模式用的是IE.极速模 ...
- Mysql差集
记录一个去差集的SQL 今天用sql去同步部分历史数据,需要用到一个求差集的sql 两张表简单结构如下: 有一个会员表 一个会员账户表 获取没有账户的会员 SELECT m.pkMember FROM ...
- 解决windows10 安装不了.net 3.5问题
百度链接附上 详细操作参考使用说明 链接: https://pan.baidu.com/s/1vLXfuxP7qxujCFVB7xjxdg 提取码: seeu 如果还不能按照参考说明的安装 请直接在安 ...