2019icpc南京网络赛 A The beautiful values of the palace(离线+树状数组)
题意:
(假设所有的点对应的值已经求出)给你一个1e6*1e6的矩阵,有m<=1e5个点有值,其余都为0
q<=1e5个询问,求子矩阵的权值和
思路:
根据二维差分,对于询问左下角(x1,y1),右上角(x2,y2)
该询问答案为a[x2][y2]-a[x1-1][y2]-a[x2][y1-1]+a[x1-1][y1-1]
其中a为二维前缀和
那么我们把询问拆成四个前缀和,和m个点一起离线,树状数组更新答案即可
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<string>
#include<stack>
#include<queue>
#include<deque>
#include<set>
#include<vector>
#include<map> #define fst first
#define sc second
#define pb push_back
#define mem(a,b) memset(a,b,sizeof(a))
#define lson l,mid,root<<1
#define rson mid+1,r,root<<1|1
#define lc root<<1
#define rc root<<1|1
#define lowbit(x) ((x)&(-x)) using namespace std; typedef double db;
typedef long double ldb;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> PI;
typedef pair<ll,ll> PLL; const db eps = 1e-;
const int mod = 1e9+;
const int maxn = 2e6+;
const int maxm = 2e6+;
const int inf = 0x3f3f3f3f;
const db pi = acos(-1.0); struct node{
ll lx;//U1 Q0
ll id,x,y,v;
node(){}
node(ll lx, ll id, ll x, ll y, ll v):lx(lx),id(id),x(x),y(y),v(v){
printf("**%lld %lld %lld %lld %lld\n",lx,id,x,y,v);
}
}Q[maxn];
bool cmp(node a, node b){
if(a.x==b.x&&a.y==b.y){
return a.lx>b.lx;
}
if(a.x==b.x)return a.y<b.y;
return a.x<b.x;
}
ll tree[maxn];
ll ans[maxn];
ll n, m, q;
void add(int x, ll c){for(int i=x;i<=n;i+=lowbit(i))tree[i]+=c;}
ll sum(int x){
ll ans = ;
for(int i = x; i; i-=lowbit(i))ans+=tree[i];
return ans;
}
int main() {
int t;
scanf("%d", &t);
while(t--){
scanf("%lld %lld %lld", &n, &m, &q);
int tot = ;
for(int i = ; i < maxn; i++){
tree[i]=ans[i]=;
}
for(int i = ; i <= m; i++){
ll x, y;
ll res;
scanf("%lld %lld", &x, &y);
x=x-n/-;y=y-n/-;
ll T = max(abs(x),abs(y));
if(x>=y)res=1ll*n*n-*T*T-*T-x-y;
else res=1ll*n*n-*T*T+*T+x+y;
ll c=;
while(res){c+=res%;res/=;}
Q[++tot]=node(,i,x+n/+,y+n/+,c);
}
for(int i = ; i <= q; i++){
ll x1,y1,x2,y2;
scanf("%lld %lld %lld %lld",&x1, &y1, &x2, &y2);
Q[++tot]=node(,i,x2,y2,);
Q[++tot]=node(,i,x1-,y1-,);
Q[++tot]=node(,i,x1-,y2,-);
Q[++tot]=node(,i,x2,y1-,-);
}
sort(Q+,Q++tot,cmp);
for(int i = ; i <= tot; i++){
if(Q[i].x<||Q[i].y<)continue;
if(Q[i].lx==)add(Q[i].y,Q[i].v);
else ans[Q[i].id]+=1ll*Q[i].v*sum(Q[i].y);
}
for(int i = ; i <= q; i++){
printf("%lld\n",ans[i]);
}
}
return ;
}
/*
22
3 4 4
1 1
2 2
3 3
2 3
1 1 1 1
2 2 3 2
1 1 2 2
1 1 2 3
*/
2019icpc南京网络赛 A The beautiful values of the palace(离线+树状数组)的更多相关文章
- 2019ICPC南京网络赛A The beautiful values of the palace
题意:蛇形填数超大版本,需要求出一些给定坐标的值的数位和,然后q次询问,一个矩形区域内值的和是多少 解题思路:二维偏序前缀和的经典题 二维偏序:求(x,y)左下角点的个数,思路是对x,y升序排序,用树 ...
- 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 ...
- 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,花了半天读懂题意的时候想到主席树查找.但是主席树这种查找 ...
随机推荐
- docker-bind挂载
使用绑定挂载 自Docker早期以来,绑定挂载一直存在.与卷相比,绑定装载具有有限的功能.使用绑定装入时,主机上的文件或目录将装入容器中.文件或目录由其在主机上的完整路径或相对路径引用.相反,当您使用 ...
- 前端Tips#3 - 简写的 border-radius 100% 和 50% 是等效的
本文同步自 JSCON简时空 - 技术博客,点击阅读 视频讲解 视频地址 文字讲解 1.先讲结论 border-radius 这个 css 属性大家应该使用得非常娴熟,现实中用到的场景基本都是四个圆角 ...
- 开箱即用!使用Rancher 2.3 启用Istio初体验
本文来自Rancher Labs Rancher的理念是Run Kubernetes Everywhere,Rancher 2.3中许多重大更新,让这一理念的实现又向前一步. 其中,最重要的两个特性是 ...
- JVM之GC(一)
Java较C而言,最大的区别在于内存管理.JVM设有无用内存空间自动回收复用机制,也就是我们所说的GC. 之前说过,栈是为线程.为函数的执行分配内存的地方,用完即“销毁”,这里留待以后做深入探讨:堆是 ...
- iOS - 点击背景视图收起系统键盘
我们在 IOS 开发中经常会需要在输入框输入数据后,需要收起系统键盘,比如由于手机屏幕不是很大,可能由于输入信息后,系统键盘就会遮挡住下一步的按钮,而系统键盘有没有收起键,所以我们可以实现点击背景视图 ...
- Java Calendar类(java.util包)
Date 类最主要的作用就是获得当前时间,同时这个类里面也具有设置时间以及一些其他的功能,但是由于本身设计的问题,这些方法却遭到众多批评,不建议使用,更推荐使用 Calendar 类进行时间和日期的处 ...
- AtCoder Beginner Contest 151 题解报告
总的来说,这次的题目比较水,然而菜菜的我并没有把所有题目都做完,话不多说,直接来干货: A:Next Alphabet 题目链接:https://atcoder.jp/contests/abc151/ ...
- Java BIO NIO 与 AIO
回顾 上一章我们介绍了操作系统层面的 IO 模型. 阻塞 IO 模型. 非阻塞 IO 模型. IO 复用模型. 信号驱动 IO 模型(用的不多,知道个概念就行). 异步 IO 模型. 并且介绍了 IO ...
- 如何使用poi在word表格中插入行的4种方法
本文记录了,在word表格中插入新行的几种方法.直接上代码说明 table.addNewRowBetween 没实现,官网文档也说明,只有函数名,但没具体实现,但很多文章还介绍如何使用这个函数,真是害 ...
- isStatic:检测数据是不是除了symbol外的原始数据
function isStatic(value) { return( typeof value === 'string' || typeof value === 'number' || typeof ...