题链:

https://www.luogu.org/problemnew/show/P3755 (洛谷上数据范围给全了的)

题解:

树状数组,离线询问
(本来想弄一个二维树状数组/二维RMQ,然后直接查询,但是空间不够用。)
做法如下,可以考虑把每个询问拆为四个, 即:四个二维前缀和。
然后把"拆过的询问操作"和"基站插入操作"排序,
排序规则:若 x 不同时,x 小的排在前面,
                否则 y 不同时,y 小的排在前面,
                否则把"基站插入操作"排在"拆过的询问操作"前面。
离散化 y 后
然后依次枚举排好序的操作,对一维树状数组进行修改和查询操作就好了。
这样可以保证对于每个前缀询问,其覆盖的区域里的基站信息都已经被统计。

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define MAXN 100500
#define ll long long
#define filein(x) freopen(#x".in","r",stdin)
#define fileout(x) freopen(#x".out","w",stdout)
using namespace std;
struct Question{
int cnt; ll sum[5];
ll Ans(){
return sum[4]-sum[3]-sum[2]+sum[1];
}
}Q[MAXN];
struct Command{
int x,y,t,b;
bool operator <(const Command & rtm) const{
if(x!=rtm.x) return x<rtm.x;
if(y!=rtm.y) return y<rtm.y;
if(t!=rtm.t) return t<rtm.t;
return 1;
}
}C[MAXN*5];
struct BIT{
ll A[MAXN*3],ret;int N;
void Reset(int n){
N=n;
memset(A,0,sizeof(A));
}
int lowbit(int x){
return x&-x;
}
void Modify(int p,int x){
while(p<=N) A[p]+=x,p+=lowbit(p);
}
ll Query(int p){
ret=0; while(p) ret+=A[p],p-=lowbit(p);
return ret;
}
}T;
int N,M,Cnt;
int main(){
static int tmp[MAXN*3],tnt;
scanf("%d%d",&N,&M);
for(int i=1,x,y,b;i<=N;i++){
scanf("%d%d%d",&x,&y,&b);
C[++Cnt]=(Command){x,y,0,b};
tmp[++tnt]=y;
}
for(int i=1,x1,y1,x2,y2;i<=M;i++){
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
x1--; y1--; Q[i].cnt=0;
C[++Cnt]=(Command){x1,y1,1,i};
C[++Cnt]=(Command){x1,y2,1,i};
C[++Cnt]=(Command){x2,y1,1,i};
C[++Cnt]=(Command){x2,y2,1,i};
tmp[++tnt]=y1; tmp[++tnt]=y2;
}
sort(C+1,C+Cnt+1);
sort(tmp+1,tmp+tnt+1);
tnt=unique(tmp+1,tmp+tnt+1)-tmp-1;
T.Reset(tnt);
for(int i=1,y;i<=Cnt;i++){
y=lower_bound(tmp+1,tmp+tnt+1,C[i].y)-tmp;
if(C[i].t) Q[C[i].b].sum[++Q[C[i].b].cnt]=T.Query(y);
else T.Modify(y,C[i].b);
}
for(int i=1;i<=M;i++)
printf("%lld\n",Q[i].Ans());
return 0;
}

●BZOJ 4822 [Cqoi2017]老C的任务的更多相关文章

  1. bzoj 4822: [Cqoi2017]老C的任务

    4822: [Cqoi2017]老C的任务 练手速... #include <iostream> #include <cstdio> #include <cstring& ...

  2. BZOJ 4822 [Cqoi2017]老C的任务 ——树状数组

    直接离散化之后用树状数组扫一遍. 把每一个询问拆成四个就可以做了. %Silvernebula 怒写KD-Tree #include <map> #include <cmath> ...

  3. bzoj 4822: [Cqoi2017]老C的任务【扫描线+树状数组+二维差分】

    一个树状数组能解决的问题分要用树套树--还写错了我别是个傻子吧? 这种题还是挺多的,大概就是把每个矩形询问差分拆成四个点前缀和相加的形式(x1-1,y1-1,1)(x2.y2,1)(x1-1,y2,- ...

  4. bzoj 4823: [Cqoi2017]老C的方块 [最小割]

    4823: [Cqoi2017]老C的方块 题意: 鬼畜方块游戏不解释... 有些特殊边,有些四个方块组成的图形,方块有代价,删掉一些方块使得没有图形,最小化代价. 比较明显的最小割,一个图形中必须删 ...

  5. bzoj 4824: [Cqoi2017]老C的键盘

    Description 老 C 是个程序员.     作为一个优秀的程序员,老 C 拥有一个别具一格的键盘,据说这样可以大幅提升写程序的速度,还能让写出来的程序 在某种神奇力量的驱使之下跑得非常快.小 ...

  6. bzoj 4823 [Cqoi2017]老C的方块——网络流

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4823 一个不合法方案其实就是蓝线的两边格子一定选.剩下两部分四相邻格子里各选一个. 所以这个 ...

  7. BZOJ 4823: [Cqoi2017]老C的方块

    分析: 我觉得我的网络流白学了...QAQ... 其实数据范围本是无法用网络流跑过去的,然而出题者想让他跑过去,也就跑过去了... 看到题目其实感觉很麻烦,不知道从哪里入手,那么仔细观察所给出的有用信 ...

  8. BZOJ 4823 [Cqoi2017]老C的方块 ——网络流

    lrd的题解:http://www.cnblogs.com/liu-runda/p/6695139.html 我还是太菜了.以后遇到这种题目应该分析分析性质的. 网络流复杂度真是$O(玄学)$ #in ...

  9. BZOJ 4824 [Cqoi2017]老C的键盘 ——树形DP

    每一个限制条件相当于一条有向边, 忽略边的方向,就成了一道裸的树形DP题 同BZOJ3167 唯一的区别就是这个$O(n^3)$能过 #include <map> #include < ...

随机推荐

  1. 团队作业7——第二次项目冲刺(Beta版本12.10)

    项目每个成员的进展.存在问题.接下来两天的安排. 已完成的内容:头像功能原型设计.头像裁剪功能.头像上传功能.测试 计划完成的内容:头像功能测试.bug修复 每个人的工作 (有work item 的I ...

  2. selenium webdriver API

    元素定位 #coding=utf-8 from selenium import webdriver from selenium.webdriver.firefox.firefox_binary imp ...

  3. Twisted 介绍 及TCP广播系统实例

    twisted 提供更多传输层 udp,tcp,tls及应用层HTTP,FTP等协议的支持,在开发方法上更提供了丰富的特性来支持异步编程 安装twisted 建议使用anaconda 安装,conda ...

  4. java方法的定义格式

    Java的方法类似于其他语言的函数,是一段用来完成特定功能的代码片段,声明格式为: [修饰符1  修饰符2  …..] 返回值类型  方法名( 形式参数列表 ){ Java 语句;… … … } 例如 ...

  5. 清华集训2015 V

    #164. [清华集训2015]V http://uoj.ac/problem/164 统计 描述 提交 自定义测试 Picks博士观察完金星凌日后,设计了一个复杂的电阻器.为了简化题目,题目中的常数 ...

  6. bzoj千题计划113:bzoj1023: [SHOI2008]cactus仙人掌图

    http://www.lydsy.com/JudgeOnline/problem.php?id=1023 dp[x] 表示以x为端点的最长链 子节点与x不在同一个环上,那就是两条最长半链长度 子节点与 ...

  7. 自己写编程语言-m语言

    一直对技术有很强的兴趣,终于,决定要写自己的语言(m语言).那就先从最简单的开始:解释执行器. 一套完整的语言包含的肯定不止解释执行器了,还要有编译器和IDE,也就还要有语法高亮.智能提示等,不过还没 ...

  8. linux cenots7安装mysql

        1.下载mysql 下载的话先确认好版本. system:centos7 mysql:5.7 下面的版本自己选择,一般是86位的. 下载好的文件 2.上传到服务器 soft文件夹,终端也进入了 ...

  9. python之路--day13-模块

    1,什么是模块 模块就是系统功能的集合体,在python中,一个py文件就是一个模块, 例如:module.py 其中module叫做模块名 2,使用模块 2.1 import导入模块 首次带入模块发 ...

  10. 用nodejs 开发的智能提示

    用nodejs 开发的智能提示 时间:2014-07-01 03:50:18 类别:搜索引擎 访问: 2576 次 感谢:http://lutaf.com/223.htm 智能提示对于搜索非常重要,相 ...