【BZOJ4822】[CQOI2017]老C的任务(扫描线)

题面

BZOJ

洛谷

题解

没有修改操作,都不需要分治了。。。

直接排序之后扫描线算贡献就好了。。。

不知道为啥洛谷上过不了。。。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
using namespace std;
#define ll long long
#define MAX 100100
inline int read()
{
int x=0;bool t=false;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=true,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return t?-x:x;
}
int n,m;
struct Node{int x,y,p;}p[MAX];
struct Qry{int l,r,x,opt,id;}q[MAX<<1];
bool operator<(Node a,Node b){return a.x<b.x;}
bool operator<(Qry a,Qry b){return a.x<b.x;}
int X[MAX<<2],Y[MAX<<2],tx,ty,tot;
int calcx(int x){return lower_bound(&X[1],&X[tx+1],x)-X;}
int calcy(int x){return lower_bound(&Y[1],&Y[ty+1],x)-Y;}
ll ans[MAX],c[MAX<<2];
int lb(int x){return x&(-x);}
void add(int x,int w){while(x<=ty)c[x]+=w,x+=lb(x);}
ll getsum(int x){ll ret=0;while(x)ret+=c[x],x-=lb(x);return ret;}
int main()
{
n=read();m=read();
for(int i=1;i<=n;++i)
{
int x=read(),y=read(),P=read();
X[++tx]=x;Y[++ty]=y;
p[i]=(Node){x,y,P};
}
for(int i=1;i<=m;++i)
{
int x1=read(),y1=read(),x2=read(),y2=read();
q[++tot]=(Qry){y1,y2,x1,-1,i};
q[++tot]=(Qry){y1,y2,x2,1,i};
X[++tx]=x1;X[++tx]=x2;Y[++ty]=y1;Y[++ty]=y2;
}
sort(&X[1],&X[tx+1]);tx=unique(&X[1],&X[tx+1])-X-1;
sort(&Y[1],&Y[ty+1]);ty=unique(&Y[1],&Y[ty+1])-Y-1;
for(int i=1;i<=n;++i)p[i].x=calcx(p[i].x),p[i].y=calcy(p[i].y);
for(int i=1;i<=tot;++i)q[i].x=calcx(q[i].x),q[i].l=calcy(q[i].l),q[i].r=calcy(q[i].r);
sort(&p[1],&p[n+1]);sort(&q[1],&q[tot+1]);
for(int i=1,j=0;i<=tot;++i)
{
while(j<n&&p[j+1].x<q[i].x)++j,add(p[j].y,p[j].p);
if(q[i].opt==-1)ans[q[i].id]-=getsum(q[i].r)-getsum(q[i].l-1);
while(j<n&&p[j+1].x<=q[i].x)++j,add(p[j].y,p[j].p);
if(q[i].opt==1)ans[q[i].id]+=getsum(q[i].r)-getsum(q[i].l-1);
}
for(int i=1;i<=m;++i)printf("%lld\n",ans[i]);
return 0;
}

【BZOJ4822】[CQOI2017]老C的任务(扫描线)的更多相关文章

  1. [BZOJ4822][CQOI2017]老C的任务(扫描线+树状数组)

    4822: [Cqoi2017]老C的任务 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 379  Solved: 203[Submit][Statu ...

  2. bzoj4822: [Cqoi2017]老C的任务(扫描线+BIT/线段树)

    裸题... 依旧是写了BIT和线段树两种(才不是写完线段树后才想起来可以写BIT呢 怎么卡常数都挺大...QAQ ccz和yy的写法好快哇%%% BIT: #include<iostream&g ...

  3. [bzoj4822][Cqoi2017]老C的任务&[bzoj1935][Shoi2007]Tree 园丁的烦恼

    来自FallDream的博客,未经允许,请勿转载,谢谢. 老 C 是个程序员.     最近老 C 从老板那里接到了一个任务——给城市中的手机基站写个管理系统.作为经验丰富的程序员,老 C 轻松地完成 ...

  4. BZOJ4822[Cqoi2017]老C的任务——树状数组(二维数点)

    题目描述 老 C 是个程序员.     最近老 C 从老板那里接到了一个任务——给城市中的手机基站写个管理系统.作为经验丰富的程序员,老 C 轻松 地完成了系统的大部分功能,并把其中一个功能交给你来实 ...

  5. [BZOJ4822] [CQOI2017] 老C的任务

    题目链接 BZOJ:https://lydsy.com/JudgeOnline/problem.php?id=4822. 洛谷:https://www.luogu.org/problemnew/sho ...

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

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

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

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

  8. [CQOI2017]老C的键盘

    [CQOI2017]老C的键盘 题目描述 额,网上题解好像都是用的一大堆组合数,然而我懒得推公式. 设\(f[i][j]\)表示以\(i\)为根,且\(i\)的权值为\(j\)的方案数. 转移: \[ ...

  9. [BZOJ4824][Cqoi2017]老C的键盘 树形dp+组合数

    4824: [Cqoi2017]老C的键盘 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 218  Solved: 171[Submit][Statu ...

随机推荐

  1. SpringMVC之编程式校验

    1.编程式效验需要实现Validator接口,针对模型类进行校验2.jar包 3.项目测试结构 4.StudentModel.java(模型类) package com.wt.entity; publ ...

  2. jetty 客服端 与服务端

    jetty 服务端,客服端有请求buffter 检查 默认4kb 4096 客服端 HttpClient client=new HttpClient(); client.setRequestBuffe ...

  3. [转]Web 通信 之 长连接、长轮询(long polling)

    本篇文章转载自Web 通信之长连接.长轮询(longpolling),版权归作者所有. 转者按:随着技术的发展,在HTML5中,可以通过WebSocket技术来完成长连接的开发,虽然如此,本文依然存在 ...

  4. C# 深浅复制 MemberwiseClone

    学无止境,精益求精 十年河东,十年河西,莫欺少年穷 学历代表你的过去,能力代表你的现在,学习代表你的将来 最近拜读了大话设计模式:原型模式,该模式主要应用C# 深浅复制来实现的!关于深浅复制大家可参考 ...

  5. Ionic 入门与实战之第二章第一节:Ionic 环境搭建之开发环境配置

    原文发表于我的技术博客 本文是「Ionic 入门与实战」系列连载的第二章第一节,主要对 Ionic 的开发环境配置做了简要的介绍,本文介绍的开发环境为 Mac 系统,Windows 系统基本类似,少许 ...

  6. 2016-03-22 OneZero团队 Daily Scrum Meeting

    会议时间: 2016-03-22 9:33-9:57am 会议内容: 一.在原有Sprint Backlog基础上,我们加了亮点(摇一摇功能:随机选取一条记录在界面显示,以提醒主页君回忆) 需求分析图 ...

  7. 软工个人博客作业Week 1

    问题1:在瀑布模型中提到模型,模型(模拟版本)和原型有什么不同,如果与原型有同样的功能,那为什么称之为模型?如果没有同样的功能,又是怎么测试那些程序的? 问题2:怎样才能高效率的广泛而深入地了解用户的 ...

  8. 同步手绘板——将View的内容映射成Bitmap转图片导出

    在Android中自有获取view中的cache内容,然后将内容转换成bitmap,方法名是:getDrawingCache(),返回结果为Bitmap,但是刚开始使用的时候,得到的结果都是null, ...

  9. python语言几个常见函数的使用

    写代码,有如下变量,请按照要求实现每个功能: name = " Kobe Bean Bryant" a. 移除 name 变量对应的值左边的空格,并输出移除后的内容 name = ...

  10. 实验二 合作:王宏财 http://www.cnblogs.com/wanghongcai/

    package 四则运算; import javax.swing.JFrame; import javax.swing.JButton; import javax.swing.JOptionPane; ...