直接离散化之后用树状数组扫一遍。

把每一个询问拆成四个就可以做了。

%Silvernebula 怒写KD-Tree

#include <map>
#include <cmath>
#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define F(i,j,k) for (ll i=j;i<=k;++i)
#define D(i,j,k) for (ll i=j;i>=k;--i)
#define ll long long
#define mp make_pair
#define maxn 400005 void Finout()
{
freopen("task.in","r",stdin);
freopen("task.out","w",stdout);
} struct Query{
ll opt,x,y,id,p;
Query(){}
Query(ll _x,ll _y,ll _id,ll _opt)
{x=_x;y=_y;id=_id;opt=_opt;p=0;}
void print()
{printf("The Option is %lld (%lld,%lld) ID %lld p %lld\n",opt,x,y,id,p);}
bool operator < (const Query a) const{
if (x==a.x&&opt==a.opt) return y<a.y;
if (x==a.x) return abs(opt)<abs(a.opt);
return x<a.x;
}
}q[maxn<<2]; ll ans[maxn]; struct Bit_Tree{
ll a[maxn];
void add(ll x,ll f)
{
for(;x<maxn;x+=x&(-x))a[x]+=f;
}
ll gs(ll x)
{
ll ret=0;
for (;x;x-=x&(-x)) ret+=a[x];
return ret;
}
}Bt; ll n,m,tot;
ll lsx[maxn],lsy[maxn],topx,topy;
ll X1[maxn],Y1[maxn],X2[maxn],Y2[maxn]; int main()
{
scanf("%lld%lld",&n,&m);tot=n;
F(i,1,n)
{
scanf("%lld%lld%lld",&q[i].x,&q[i].y,&q[i].p);
lsx[i]=q[i].x;lsy[i]=q[i].y; q[i].opt=0;q[i].id=i;
}
topx=topy=n;
F(i,1,m)
{
scanf("%lld%lld%lld%lld",&X1[i],&Y1[i],&X2[i],&Y2[i]);
lsx[++topx]=X1[i];lsx[++topx]=X2[i];
lsy[++topy]=Y1[i];lsy[++topy]=Y2[i];
}
lsx[++topx]=-1e15; lsy[++topy]=-1e15;
lsx[++topx]=-1e14; lsy[++topy]=-1e14;
sort(lsx+1,lsx+topx+1); sort(lsy,lsy+topy+1);
F(i,1,n)
{
q[i].x=lower_bound(lsx+1,lsx+topx+1,q[i].x)-lsx;
q[i].y=lower_bound(lsy+1,lsy+topy+1,q[i].y)-lsy;
}
F(i,1,m)
{
X1[i]=lower_bound(lsx+1,lsx+topx+1,X1[i])-lsx;
X2[i]=lower_bound(lsx+1,lsx+topx+1,X2[i])-lsx;
Y1[i]=lower_bound(lsy+1,lsy+topy+1,Y1[i])-lsy;
Y2[i]=lower_bound(lsy+1,lsy+topy+1,Y2[i])-lsy;
q[++tot]=Query(X2[i],Y2[i],i,1); q[++tot]=Query(X1[i]-1,Y1[i]-1,i,1);
q[++tot]=Query(X2[i],Y1[i]-1,i,-1);q[++tot]=Query(X1[i]-1,Y2[i],i,-1);
}
sort(q+1,q+tot+1);
F(i,1,tot)
{
if (q[i].opt==0) Bt.add(q[i].y,q[i].p);
else
ans[q[i].id]+=q[i].opt*Bt.gs(q[i].y);
}
F(i,1,m) printf("%lld\n",ans[i]);
}

  

BZOJ 4822 [Cqoi2017]老C的任务 ——树状数组的更多相关文章

  1. 【BZOJ1935/4822】[Shoi2007]Tree 园丁的烦恼/[Cqoi2017]老C的任务 树状数组

    题意:两道题差不多,都是给你一堆平面上的点,每个点有权值,然后m次询问求某一矩形区域内的点权和 题解:先离散化,然后将询问拆成左右两条线段,然后将点和这些线段一起按x坐标排序,在y轴上维护树状数组.然 ...

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

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

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

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

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

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

  5. ●BZOJ 4822 [Cqoi2017]老C的任务

    题链: https://www.luogu.org/problemnew/show/P3755 (洛谷上数据范围给全了的) 题解: 树状数组,离线询问 (本来想弄一个二维树状数组/二维RMQ,然后直接 ...

  6. 【BZOJ】1818: [Cqoi2010]内部白点(树状数组+离散+特殊的技巧)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1818 这一题一开始我就看错了,bzoj的那个绝对值109简直坑人,应该是10^9,我直接写了个暴力. ...

  7. bzoj 1818 [CQOI 2010] 内部白点 - 扫描线 - 树状数组

    题目传送门 快速的列车 慢速的列车 题目大意 一个无限大的方格图内有$n$个黑点.问有多少个位置上下左右至少有一个黑点或本来是黑点. 扫描线是显然的. 考虑一下横着的线段,取它两个端点,横坐标小的地方 ...

  8. BZOJ 3236 AHOI 2013 作业 莫队+树状数组

    BZOJ 3236 AHOI 2013 作业 内存限制:512 MiB 时间限制:10000 ms 标准输入输出     题目类型:传统 评测方式:文本比较 题目大意: 此时己是凌晨两点,刚刚做了Co ...

  9. BZOJ 1103: [POI2007]大都市meg [DFS序 树状数组]

    1103: [POI2007]大都市meg Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2221  Solved: 1179[Submit][Sta ...

随机推荐

  1. ios has denied the launch request.

    ios has denied the launch request. You can choose either of the two ways. Solution 1: Open System Pr ...

  2. cnblog之初来乍到

    hello,大家好,我是蓝斯老师 一枚致力于android开发的攻城狮 很荣幸能够在博客园开博(博主以前是混CSDN的,原博客地址http://blog.csdn.net/lancees) 希望将来能 ...

  3. 动画 iOS基础

    动画 iOS基础 1.     basic animation  基础动画 一个基础动画 在一个开始值和一个结束值之间运动   messageLabel.alpha=0.0; [UIView  ani ...

  4. iOS Category实现原理

    iOS Category实现原理 实现原理 我们不主动引入 Category 的头文件,Category 中的方法都会被添加进主类中.我们可以通过 - performSelector: 等方式 对 C ...

  5. perl在linux下通过date获取当前时间

    perl处理文件的时候最好添加上 处理的时间戳,获取系统的时间又多种方法,但是反引号是最原始的,不需要其他外界条件和lib的支持. my $now = `date "+%F %T" ...

  6. 模拟水题之unique两行AC

    https://icpc.njust.edu.cn/Contest/749/A/ Description 小鱼喜欢吃糖果.他有两盒糖果,两盒糖果分别仅由小写字母组成的字符串s和字符串t构成.其中'a' ...

  7. Google Colab的一些注意事项

    1.执行命令行前面加! 当我们使用python解释器时,我们需要不停地在命令行和IDE 之间切换,当我们需要使用命令行工具时.不过,Jupyter Notebook给了我们在notebook中运行sh ...

  8. 插入函数概念 接收一个callback,然后外面函数,接一个对象,和一个next,外面都执行完了,继续执行下一个函数,相当于一个链状体,插入了一个函数的概念 | log4js 输出 等于 console.info

    插入函数概念 接收一个callback,然后外面函数,接一个对象,和一个next,外面都执行完了,继续执行下一个函数,相当于一个链状体,插入了一个函数的概念 app.use(function (ctx ...

  9. myeclipse 导入项目时no projects are found to import解决办法

    myeclipse 识别一个工程需要.classpath与.project文件,一般无需提交SVN所以项目切下来的时候是没有这两个文件的. 方法1: 1) 在myeclipse中新建一个和你要导入的项 ...

  10. 运用模逆运算(同余方程)来解决Matlab课上的一道思考题

    一道Matlab编程题 & 暴力解法 Matlab课上老师出了这样一道题: 一个篮子有K个鸡蛋: 2个2个拿剩1个: 3个3个全部拿完: 4个4个拿剩1: 5个5个拿剩4个: 6个6个拿剩3个 ...