【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. 利用Costura.Fody制作绿色单文件程序(C#程序(含多个Dll)合并成一个Exe)

    原文:利用Costura.Fody制作绿色单文件程序(C#程序(含多个Dll)合并成一个Exe) 开发程序的时候经常会引用一些第三方的DLL,然后编译生成的exe文件就不能脱离这些DLL独立运行了.这 ...

  2. odoo订餐系统之类型设计

    这次开发的模块是订餐的类型设计,比如大荤 小荤 蔬菜 米饭 等基本数据.1.设计model类,很简单就一个字段: class MyLunchProductionCategory(osv.Model): ...

  3. Create-React-App 使用记录

    如果要修改 host 和 端口,需要在项目根目录添加 .env 文件,然后再文件中添加 HOST=dev.zhengtongauto.com PORT=3000 如果需要加上反向代理,需要处理接口跨域 ...

  4. [Oracle]跨DBLINK的JOIN查询的数据库缓存问题15783452141

    客户问到跨DBLINK,结合本地表和远端表的时候,数据在哪一边 的 Data Buffer 缓存. 测试的结果是:本地表在本地缓存,远端表在远端缓存. ####Testcase-0929-10 本地数 ...

  5. copy constructor

    copy constructor也分为trivial和nontrivial两种 如果class展现出bitwise copy semantics(按位拷贝语义),则不会构造出 copy constru ...

  6. python常用程序算法

    一.冒泡排序: 1.冒泡排序是将无序的数字排列成从小到大的有序组合: 过程:对相邻的两个元素进行比较,对不符合要求的数据进行交换,最后达到数据有序的过程. 规律: 1.冒泡排序的趟数时固定的:n-1 ...

  7. Redis+Keepalived高可用环境部署记录

    Keepalived 实现VRRP(虚拟路由冗余)协议,从路由级别实现VIP切换,可以完全避免类似heartbeat脑裂问题,可以很好的实现主从.主备.互备方案,尤其是无状态业务,有状态业务就需要额外 ...

  8. springboot undertow替换tomcat方式

    版权声明: https://blog.csdn.net/weixin_38187317/article/details/81532560说明        undertow,jetty和tomcat可 ...

  9. M2事后会议报告

    设想和目标 1. 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? Beta阶段的爬虫需要更稳定.更高效.操作更便捷.在定义中爬取对性能和功能的要求高,典型用户和场景 ...

  10. 在Java中执行Tomcat中startup.bat

    问题:更改数据库时,需要重启Tomcat服务器,才能把更改后的数据加载到项目中.于是想每次更改数据库时,都调用Java方法,重启Tomcat 代码: Process process = Runtime ...