题意:蛇形填数超大版本,需要求出一些给定坐标的值的数位和,然后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的更多相关文章

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

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

  2. 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 ...

  3. 2019icpc南京网络赛_F_Greedy Sequence

    题意 题意不明,队友告诉我对于每个\(i\),所在下标\(p[i]\),在\([p[i]-k,p[i]+k]\)中找到小于\(i\)的最大数\(x\),然后\(ans[i]=ans[x]+1\)即可. ...

  4. 2019ICPC南京网络赛B super_log——扩展欧拉定理

    题目 设函数 $$log_a*(x) = \begin{cases}-1, & \text{ if } x < 1 \\ 1+log_a*(log_ax) & \text{ if ...

  5. 2019icpc南京网络赛

    B. super_log(扩展欧拉函数) 题意:求aa...(b个a)模M的值. 思路:递归用欧拉函数求解,我们知道欧拉降幂公式: 如果讨论b和φ(p)的关系会很麻烦,网上证明了一种精妙的方法,只需重 ...

  6. 2019icpc南京网络赛 A 主席树

    题意 给一个\(n\times n\)的螺旋矩阵,给出其中的\(m\)个点的值分别为各个点上数字的数位之和,给出\(q\)个询问,每次询问从\((x1,y1)\)到\((x2,y2)\)的子矩阵的和. ...

  7. 2019icpc南京网络赛 F 主席树

    题意 给一个\(n\)的全排列数组\(a\),求一个递推数组每一项的值:\(ans[i]=ans[j]+1\),\(j\)为\(a[pos[i]-k]到a[pos[i]+k],(pos[i]为i在数组 ...

  8. 2019ICPC南京网络赛总结

    这次是在学校打的,总体不算好,过两题校排200多..很惨. 开场一段时间没人过题,但是很多人交I, 我也就再看,看着看着发现不可做,这时候转F,花了半天读懂题意的时候想到主席树查找.但是主席树这种查找 ...

  9. 2019ICPC南京网络赛F Greedy Sequence

    题意:对于1<=i<=n每次找到(pos[i]-k,pos[i]+k)内不大于i的最大那个数,ans[i]=ans[mx]+1,若ans[mx]未知则递归处理ans[mx] PS:这个题比 ...

随机推荐

  1. activiti7删除流程定义的相关信息

    package com.zcc.activiti02; import org.activiti.engine.ProcessEngine;import org.activiti.engine.Proc ...

  2. 转 Jmeter业务请求比例

    [转载]Jmeter业务请求比例1   ps:文章转自订阅号“测试那点事儿”,链接:https://mp.weixin.qq.com/s/qVD4iNO0QqRIwAIq9_E_Kw   方法二: 可 ...

  3. 《Hadoop学习之路》学习实践

    (实践机器:blog-bench) 本文用作博文<Hadoop学习之路>实践过程中遇到的问题记录. 本文所学习的博文为博主“扎心了,老铁” 博文记录.参考链接https://www.cnb ...

  4. Python变量空间

    a==b的时候a和b指向同一个ID,然后a重新赋值后a指向另一个ID 那么这样的话,变量(a...)不就是数据空间"123"的引用了吗(其实在Python中这才是正确的说法)

  5. HTML + CSS (上)

    HTML 概念: 超文本标记语言. 核心: 语义. 主体结构: <!doctype html> //告诉浏览器这是什么语言 html //主体 head //头文件 body //页面主体 ...

  6. Sed的查,删,增,改

    sed的查,删,增,改 1.sed的查找 2.sed的删除 3.sed的上下左右增加文件内容 4.sed的改

  7. printf 格式化打印 awk 数据处理工具

    printf解析 这个玩意说白了,就是格式化打印输出. awk awk与sed都是处理数据的工具.sed是处理整行的数据,awk则比较倾向于一行当中分成数个[字段]来处理. 具体操作: 注意的几个点 ...

  8. C—变量

    C—变量 在C语言中,变量要先定义后使用. 使用时,必须说明变量的存储类型与数据类型. 变量说明的一般形式: <存储类型>  <数据类型>  <变量名> 存储类型的 ...

  9. spring framework三个版本的下载包区别

    docs:该文件夹下包含Spring的相关文档.开发指南及API参考文档:dist:该文件夹下包含Spring jar包.文档.项目等内容:schema:里面包含了Spring4所用到的xsd文件:

  10. nodejs 进阶:封装所有对数据库的常用操作

    //这个模块里面封装了所有对数据库的常用操作 var MongoClient = require('mongodb').MongoClient; var settings = require(&quo ...