【BZOJ4822】[CQOI2017]老C的任务(扫描线)
【BZOJ4822】[CQOI2017]老C的任务(扫描线)
题面
题解
没有修改操作,都不需要分治了。。。
直接排序之后扫描线算贡献就好了。。。
不知道为啥洛谷上过不了。。。
#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的任务(扫描线)的更多相关文章
- [BZOJ4822][CQOI2017]老C的任务(扫描线+树状数组)
4822: [Cqoi2017]老C的任务 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 379 Solved: 203[Submit][Statu ...
- bzoj4822: [Cqoi2017]老C的任务(扫描线+BIT/线段树)
裸题... 依旧是写了BIT和线段树两种(才不是写完线段树后才想起来可以写BIT呢 怎么卡常数都挺大...QAQ ccz和yy的写法好快哇%%% BIT: #include<iostream&g ...
- [bzoj4822][Cqoi2017]老C的任务&[bzoj1935][Shoi2007]Tree 园丁的烦恼
来自FallDream的博客,未经允许,请勿转载,谢谢. 老 C 是个程序员. 最近老 C 从老板那里接到了一个任务——给城市中的手机基站写个管理系统.作为经验丰富的程序员,老 C 轻松地完成 ...
- BZOJ4822[Cqoi2017]老C的任务——树状数组(二维数点)
题目描述 老 C 是个程序员. 最近老 C 从老板那里接到了一个任务——给城市中的手机基站写个管理系统.作为经验丰富的程序员,老 C 轻松 地完成了系统的大部分功能,并把其中一个功能交给你来实 ...
- [BZOJ4822] [CQOI2017] 老C的任务
题目链接 BZOJ:https://lydsy.com/JudgeOnline/problem.php?id=4822. 洛谷:https://www.luogu.org/problemnew/sho ...
- bzoj 4822: [Cqoi2017]老C的任务
4822: [Cqoi2017]老C的任务 练手速... #include <iostream> #include <cstdio> #include <cstring& ...
- bzoj 4823: [Cqoi2017]老C的方块 [最小割]
4823: [Cqoi2017]老C的方块 题意: 鬼畜方块游戏不解释... 有些特殊边,有些四个方块组成的图形,方块有代价,删掉一些方块使得没有图形,最小化代价. 比较明显的最小割,一个图形中必须删 ...
- [CQOI2017]老C的键盘
[CQOI2017]老C的键盘 题目描述 额,网上题解好像都是用的一大堆组合数,然而我懒得推公式. 设\(f[i][j]\)表示以\(i\)为根,且\(i\)的权值为\(j\)的方案数. 转移: \[ ...
- [BZOJ4824][Cqoi2017]老C的键盘 树形dp+组合数
4824: [Cqoi2017]老C的键盘 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 218 Solved: 171[Submit][Statu ...
随机推荐
- 挂载银行前置机Ukey到windows server2012虚拟机的操作记录
公司有跟银行对接的金融业务,需要配置银行前置机环境.通过KVM的WebVirtMgr管理平台创建windows server2008虚拟机,安装参考:kvm虚拟化管理平台WebVirtMgr部署-完整 ...
- 对于League of Legends的分析
League of Legends是一款在国内甚至国际上都很受欢迎的一款网络竞技行的游戏.它是由美国Riot Games开发,腾讯游戏运营的英雄对战网游.<英雄联盟>除了即时战略.团队作战 ...
- 第三周作业————————word count
#include <stdio.h> void main() { FILE *fp; , str, word, pu, ch; int g; str = ; word = ; pu = ; ...
- oracle加注释
COMMENT ON table GC_G_DOC84 IS '行政处罚撤销决定书'; COMMENT ON column GC_G_DOC84.CASEID IS '案件记录ID';
- What’s for Beta
经过和Travis与Zhongqiu讨论,我们希望我们发布的Beta版本会支持如下内容: Naïve long-term plan UI (Useable) Naïve long-term plan ...
- 定义类型别名(typedef,using)
说到类型别名,无非是给类型名(如int,char,float,double,bool)取一个比较有特殊含义的名字而已 最常用的关键莫过于 typedef 吧 typedef最常见的用法是与结构体str ...
- 解决因为本地代码和远程代码冲突,导致git pull无法拉取远程代码的问题
一.问题 当本地代码和远程代码有冲突的时候,执行git pull操作的时候,会提示有冲突,然后直接终止本次pull,查了些资料没有找到强制pull的方式,但是可以使用如下方式解决. 二.解决思路 可以 ...
- number (1)eclipse 连接数据库报错 数据库信息不对导致的出错
- maven项目使用本地jar包
问题描述 今天自己写demo需要用到jodconverter-2.2.2.jar,但是maven库中只有2.2.1的版本.我看网上有提供jar包的.于是我下载下来,但是怎么引用到pom文件中呢?并且保 ...
- Oracle中rownum和rowid的理解
rownum,rowid都叫伪列. 但是,rownum是逻辑上的编号,且其值总是从1开始,每行的rounum不是固定的.而rowid是“物理”编号.若数据库文件没有移动,则每行的 rowid一般是固定 ...