BZOJ4822[Cqoi2017]老C的任务——树状数组(二维数点)
题目描述
输入
输出
样例输入
0 0 1
0 1 2
2 2 4
1 0 8
0 0 1 1
1 1 5 6
样例输出
4
#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
struct node
{
int x;
int y;
int num;
int cnt;
int v;
}s[10000010];
int n,m;
ll v[10000010];
int a,b,c,d;
int g[10000010];
int maxy;
int tot;
ll ans[2000010][5];
void add(int x,int k)
{
for(int i=x;i<=maxy;i+=i&-i)
{
v[i]+=1ll*k;
}
}
ll ask(int x)
{
ll res=0;
for(int i=x;i;i-=i&-i)
{
res+=v[i];
}
return res;
}
bool cmp(node a,node b)
{
if(a.x==b.x)
{
if(a.y==b.y)
{
return a.cnt<b.cnt;
}
return a.y<b.y;
}
return a.x<b.x;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%d%d%d",&s[i].x,&s[i].y,&s[i].v);
g[i]=s[i].y;
}
tot=n;
for(int i=1;i<=m;i++)
{
scanf("%d%d%d%d",&a,&b,&c,&d);
s[++tot].x=a-1;
s[tot].y=b-1;
s[tot].cnt=i;
s[tot].num=1;
g[tot]=b-1;
s[++tot].x=a-1;
s[tot].y=d;
s[tot].cnt=i;
s[tot].num=2;
g[tot]=d;
s[++tot].x=c;
s[tot].y=b-1;
s[tot].cnt=i;
s[tot].num=3;
g[tot]=b-1;
s[++tot].x=c;
s[tot].y=d;
s[tot].cnt=i;
s[tot].num=4;
g[tot]=d;
}
sort(g+1,g+1+tot);
sort(s+1,s+1+tot,cmp);
maxy=unique(g+1,g+1+tot)-g-1;
for(int i=1;i<=tot;i++)
{
if(!s[i].cnt)
{
int val=lower_bound(g+1,g+1+maxy,s[i].y)-g;
add(val,s[i].v);
}
else
{
int val=lower_bound(g+1,g+1+maxy,s[i].y)-g;
ans[s[i].cnt][s[i].num]=ask(val);
}
}
for(int i=1;i<=m;i++)
{
printf("%lld\n",ans[i][4]+ans[i][1]-ans[i][2]-ans[i][3]);
}
}
BZOJ4822[Cqoi2017]老C的任务——树状数组(二维数点)的更多相关文章
- BZOJ1935: [Shoi2007]Tree 园丁的烦恼(树状数组 二维数点)
		题意 题目链接 Sol 二维数点板子题 首先把询问拆成四个矩形 然后离散化+树状数组统计就可以了 // luogu-judger-enable-o2 #include<bits/stdc++.h ... 
- 【BZOJ1935/4822】[Shoi2007]Tree 园丁的烦恼/[Cqoi2017]老C的任务 树状数组
		题意:两道题差不多,都是给你一堆平面上的点,每个点有权值,然后m次询问求某一矩形区域内的点权和 题解:先离散化,然后将询问拆成左右两条线段,然后将点和这些线段一起按x坐标排序,在y轴上维护树状数组.然 ... 
- BZOJ 4822 [Cqoi2017]老C的任务 ——树状数组
		直接离散化之后用树状数组扫一遍. 把每一个询问拆成四个就可以做了. %Silvernebula 怒写KD-Tree #include <map> #include <cmath> ... 
- bzoj 4822: [Cqoi2017]老C的任务【扫描线+树状数组+二维差分】
		一个树状数组能解决的问题分要用树套树--还写错了我别是个傻子吧? 这种题还是挺多的,大概就是把每个矩形询问差分拆成四个点前缀和相加的形式(x1-1,y1-1,1)(x2.y2,1)(x1-1,y2,- ... 
- bzoj4785:[ZJOI2017]树状数组:二维线段树
		分析: "如果你对树状数组比较熟悉,不难发现可怜求的是后缀和" 设数列为\(A\),那么可怜求的就是\(A_{l-1}\)到\(A_{r-1}\)的和(即\(l-1\)的后缀减\( ... 
- 树状数组 二维偏序【洛谷P3431】 [POI2005]AUT-The Bus
		P3431 [POI2005]AUT-The Bus Byte City 的街道形成了一个标准的棋盘网络 – 他们要么是北南走向要么就是西东走向. 北南走向的路口从 1 到 n编号, 西东走向的路从1 ... 
- 树状数组+二维前缀和(A.The beautiful values of the palace)--The Preliminary Contest for ICPC Asia Nanjing 2019
		题意: 给你螺旋型的矩阵,告诉你那几个点有值,问你某一个矩阵区间的和是多少. 思路: 以后记住:二维前缀和sort+树状数组就行了!!!. #define IOS ios_base::sync_wit ... 
- BZOJ 4785 [Zjoi2017]树状数组 | 二维线段树
		题目链接 BZOJ 4785 题解 这道题真是令人头秃 = = 可以看出题面中的九条可怜把求前缀和写成了求后缀和,然后他求的区间和却仍然是sum[r] ^ sum[l - 1],实际上求的是闭区间[l ... 
- 6月28日考试 题解(GCD约分+动态规划+树状数组二维偏序)
		前言:考的一般般吧……T3暴力没打上来挺可惜的,到手的75分没了. ---------------------------------- T1 [JZOJ4745]看电影 Description 听说 ... 
随机推荐
- springMVC中上传图片
			上传图片,很常见的问题,基本每个人都会遇到,但是个人认为在springMVC中上传图片相对来说是比较简单的,因为框架已经帮我们做好了许多事情. 这篇文章所用的环境:spring4.3.3 .jdk1. ... 
- linux笔记 - 配置与编译
			linux内核下载地址:https://www.kernel.org/ ubuntu下载内核对应源码: sudo apt-get source linux-$(uname -r) #此命令下载的源码存 ... 
- Oracle ORA-01940: 无法删除当前连接的用户
			当我们要删除一个oracle的用户时,如果有其他人连接到数据库则会报以下错误: ORA-01940: 无法删除当前连接的用户 处理办法就是:将连接到当前用户的session给kill掉. 处理步骤如下 ... 
- 7、存储类 & 作用域 & 生命周期 & 链接属性
			概念解析 存储类 存储类就是存储类型,也就是描述C语言变量在何种地方存储. 内存有多种管理方法:栈.堆.数据段.bss段..text段······一个变量的存储类属性就是描述这个变量存储在何种内存段中 ... 
- RocketMQ阅读注意
			1 队列个数设置 producer发送消息时候设置,特别注意:同一个topic仅当第一次创建的时候设置有效,以后修改无效,除非修改broker服务器上的consume.json文件, 
- JQuery将form表单值转换成json字符串函数
			由于后台接口限定,必须要将表单内容转换成json字符串提交,因此写了一个将form表单值转成json字符串的函数. 前提:页面引入了JQuery 下面直接上代码 一.代码 / ... 
- java基础(个人学习笔记) A
			1. 声明long类型的变量 需要在数值的末尾+l/L.(不加L的话,貌似默认就是int型了.当给long赋值一个超过int范围的值的时候,会出问题.) 2. package java_ ... 
- LeetCode之Add Two Numbers
			Add Two Numbers 方法一: 考虑到有进位的问题,首先想到的思路是: 先分位求总和得到 totalsum,然后再将totalsum按位拆分转成链表: ListNode* addTwoNum ... 
- restfull环境搭建-helloword(三)
			原文地址:http://only81.iteye.com/blog/1689537 This section creates a CRUD (Create, Read, Update, Delete) ... 
- Pair Work:电梯调度算法的实现和测试 by 12061171 and 12061168
			结队成员简介: 成员:牛强,学号12061171:刘文乔,学号120611683 我们之所以结对编程以完成所给课设要求,是因为我们互相了解彼此,能够更好更快地完成.下图是我们合作编程时的留影: 牛强是 ... 
