/*
题意:
给你n头牛的位置x,和他们的音调v。 让我们求的是什么呢,求的是两头牛之间的(位置之差)*(两头牛中的最大的音调)。
我们按照v的大小从小到大排个序,从1-n依次扫一遍,当扫到第i头牛的时候,i的音调就最大,所以 如果求出位置差的和的话,问题就解决了、
简单的总结一下:
主要分两个数组的思路很是巧妙啊。
在将一个数插进去的时候,牛的位置不一定在哪,所有看看左边的有几头牛,右边有几头牛,然后分别求出左边的差的和,右边差的和,然后两边差的和相加再乘以这头牛的音调(因为在前i头牛中,这头牛的音调最大)。
我们在这里分两个数组用来干什么的呢? 第一个数组用计数,左边有几头牛,第二个数组用来求左边的牛的位置的和,那么左边的差的和就是(现在这头牛的位置*左边牛的个数-左边牛的位置的和)
*/
#if 0
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int MAXX=20000+100;
int c[3][MAXX];
int lowbit(int x)
{
return x&(-x);
}
void add(int p,int x,int v)
{
for(; x<MAXX; x+=lowbit(x))
{
c[p][x]+=v;
}
}
int sum(int p,int x)
{
int sum=0;
for(; x>0; x-=lowbit(x))
{
sum+=c[p][x];
}
return sum;
}
struct node
{
int x,v;
bool operator <(const node& b)const
{
return v<b.v;
}
}nodes[MAXX];
int main()
{
ios::sync_with_stdio(false);
int n;
while(cin>>n&&n)
{
memset(
MooFest(树状数组+离线处理)
最新推荐文章于 2024-01-22 01:47:04 发布
本文介绍了如何结合树状数组和离线处理技术来高效解决MooFest比赛中的复杂数据查询问题。通过实例解析,详细阐述了树状数组的构造、更新以及离线处理在优化查询效率方面的作用。

最低0.47元/天 解锁文章
944

被折叠的 条评论
为什么被折叠?



