hdu5032 树状数组
题意:
对于一个1000*1000的Mushroom,
起点在(1,1)给定一个斜率和一个x,求由斜率和x所对应的直线构成的三角形内蘑菇的总值。
每个点的对应的值为(x+A)(y+B)
解
每个点都有一个相对于(1,1)的一个斜率我们就按照这个斜率的大小进行排序 大的放在后面
然后我们对于每个要查询的点的斜率的进行排序
采用离线的 方法去计算我们要求的东西这样我们对于每次查询都把小于他斜率的点扔进树状数组对应的x中就可以了
然后求和
#include <iostream>
#include <algorithm>
#include <string.h>
#include <cstdio>
using namespace std;
const int maxn =+;
typedef long long LL; struct point
{
int x,y;
LL ans;
double p;
point(int cx=,int cy=,LL cans=,double cp=)
{
x=cx; y=cy; ans=cans; p=cp;
}
}s[maxn],sc[maxn];
bool cmpp(point a, point b)
{
return a.p<b.p;
}
bool cmpi(point a, point b)
{
return a.y<b.y;
}
LL C[];
int lowbit(int x)
{
return x&-x;
}
void add(int x,LL d)
{
while(x<=)
{
C[x]+=d; x+=lowbit(x);
}
}
LL sum(int x)
{
LL ret=;
while(x>)
{
ret+=C[x]; x-=lowbit(x);
}
return ret;
} int main()
{
int num=;
for(int i=; i<=;i++)
for(int j=; j<=; j++)
s[num++]=point(i,j,,1.0*j/i);
int cas;
sort(s,s+num,cmpp);
scanf("%d",&cas);
for(int cc =; cc<=cas; cc++)
{
LL A,B;
scanf("%I64d%I64d",&A,&B);
int m;
scanf("%d",&m);
for(int i=; i<m; i++){
int a,b,x;
scanf("%d%d%d",&a,&b,&x);
sc[i]=point( x,i,,1.0*b/a );
}
sort(sc,sc+m,cmpp);
int now=;
memset(C,,sizeof(C));
for(int i=; i<m; i++)
{
while(now<&&s[now].p<=sc[i].p){
add(s[now].x,1LL*(s[now].x+A)*(s[now].y+B));now++;
}
sc[i].ans=sum(sc[i].x);
}
sort(sc,sc+m,cmpi);
printf("Case #%d:\n",cc);
for(int i=; i<m; i++)
{
printf("%I64d\n",sc[i].ans);
}
} return ;
}
hdu5032 树状数组的更多相关文章
- HDU5032 -- Always Cook Mushroom 树状数组 14年北京网络赛
题意:1000*1000的格子, 坐标为(1, 1) ~ (1000, 1000), 常数 A, B, 点(x, y)权值为 (x + A) * (y + B), q次询问, 每次询问(0, 0) ...
- HDU5032 Always Cook Mushroom(树状数组&&离线)
树状数组+询问离线.一个优化是需要的,就是先对1000*1000个点先排序,而不是每次都生成这1000*1000个点然后和询问一起排序,那样会tle. #include <iostream> ...
- BZOJ 1103: [POI2007]大都市meg [DFS序 树状数组]
1103: [POI2007]大都市meg Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2221 Solved: 1179[Submit][Sta ...
- bzoj1878--离线+树状数组
这题在线做很麻烦,所以我们选择离线. 首先预处理出数组next[i]表示i这个位置的颜色下一次出现的位置. 然后对与每种颜色第一次出现的位置x,将a[x]++. 将每个询问按左端点排序,再从左往右扫, ...
- codeforces 597C C. Subsequences(dp+树状数组)
题目链接: C. Subsequences time limit per test 1 second memory limit per test 256 megabytes input standar ...
- BZOJ 2434: [Noi2011]阿狸的打字机 [AC自动机 Fail树 树状数组 DFS序]
2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 2545 Solved: 1419[Submit][Sta ...
- BZOJ 3529: [Sdoi2014]数表 [莫比乌斯反演 树状数组]
3529: [Sdoi2014]数表 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1399 Solved: 694[Submit][Status] ...
- BZOJ 3289: Mato的文件管理[莫队算法 树状数组]
3289: Mato的文件管理 Time Limit: 40 Sec Memory Limit: 128 MBSubmit: 2399 Solved: 988[Submit][Status][Di ...
- 【Codeforces163E】e-Government AC自动机fail树 + DFS序 + 树状数组
E. e-Government time limit per test:1 second memory limit per test:256 megabytes input:standard inpu ...
随机推荐
- Excel--数据分列功能
原文:http://www.ittribalwo.com/article/3963.html excel分列功能一:按照固定宽度进行数据拆分 情景: 如下图所示,在日常工作中,我们经常需要根据人员的身 ...
- python之if __name__ == '__main__'
if __name__ == '__main__' 我们简单的理解就是: 如果模块是被直接运行的,则代码块被运行,如果模块是被导入的,则代码块不被运行.
- ab压力测试工具的使用
一.下载稳定版2.2.31 http://httpd.apache.org/ 二.2.2.*和2.4.*区别? httpd-2.2.x(prefork) httpd-2.4.x(event) 编 ...
- Orchard Core 增加了一个API模块,要怎么调用
如下,我在Orchard Core框架中添加了一个API的模块,并且定义了对应的权限才可以调用,那么我们现在考虑的就是要怎么去调用它. 首先,我们用Fiddler查看下我们正常的登录的http报文,直 ...
- swift 相机、相册、定位的权限判断
//是否开启相机权限 func IsOpenCamera() -> Bool{ let authStatus = AVCaptureDevice.authorizationStatus(for: ...
- SQL优化之踩过的坑【一】
正看资料看的过瘾,突然收到报警,说服务器负载太高,好吧,登录服务器看看,我擦嘞,还能不能愉快的玩耍了?下面是当时的负载情况 看见mysql使用cpu已经到了2000,io没有等待.说明应该没有大的临时 ...
- wordpress去掉<link rel='dns-prefetch' href='//s.w.org' />
我们在用wordpress建站时经常会看到<link rel='dns-prefetch' href='//s.w.org' />,应该是为了从s.w.org预获取表情和头像,目的是提高网 ...
- push到Git时常见的失败
之前学用git的时候,不想记命令,总是gui和bash交互的用,但是发现总出现push失败的问题,用gui来fetch的时候,显示下拉成功,但事实上并没有,这时候得在bash上用命令来下 ...
- C#编程基础
1..NET与C# A..NET 是 Microsoft XML Web services 平台.XML Web services 允许应用程序通过 Internet 进行通讯和共享数据,而不管所采用 ...
- 解决npm ERR! Unexpected end of JSON input while parsing near的方法汇总
参考链接:https://segmentfault.com/a/1190000015646531