您的位置:首页 > 数据库 > Memcache

Nginx+Tomcat+Memcached 实现集群部署时Session共享

2014-12-22 16:29 821 查看
hdu 2838

《Cow Sorting》 这题本来兴高采烈的想用java做一遍,结果做出来之后无限超内存,真是啊,做题的时候java这种东西还是轻易不要动了。还有感觉要把数字都要离散化的,结果后台数据不需要离散化。

题意:给一个n代表n个牛,然后再给n个数我觉得是n以内的数(包括n)。虽然体面上没说。然后只能相邻两个数字交换位置,会让牛产生怒气值,值为互相移动的两个牛的编号值相加的和,求把牛按从小到大排好序之后最小让牛产生的怒气。

思路:其实想要最小的怒气值你只要不做无用功那不管怎么移动都是最小值。 无用功即不把编号小的牛放到编号大的牛后面就行了。然后怒气值就是(当前牛之前比当前牛编号大的牛的个数)*(当前牛的个数)+(当前牛之前比当前牛编号大的牛的编号总值),注意用long long。。

本题代码
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <math.h>
#include <algorithm>
using namespace std;
#define ll long long
struct Node
{
int qx;
long long sum;
}C[100001];
int n;
int lowbit(int k)
{
return k & (-k);
}
void add(int x, int val, int vall)
{
while (x <= n)
{
C[x].qx += val;
C[x].sum += vall;
x += lowbit(x);
}
}
ll queryqx(int x)
{
ll sum1 = 0;
while (x > 0)
{
sum1 += C[x].qx;
x -= lowbit(x);
}
return sum1;
}
ll querysum(int x)
{
ll sum2 = 0;
while (x > 0)
{
sum2 += C[x].sum;
x -= lowbit(x);
}
return sum2;
}
int main()
{
while (scanf("%d", &n) == 1)
{
int cow;
ll tqx, ans = 0, tsum;
memset(C, 0, sizeof C);
for (int i = 0; i < n; i++)
{
scanf("%d", &cow);
add(cow, 1, cow);
tqx = i+1-queryqx(cow);
if (tqx > 0)
{
tsum = querysum(n) - querysum(cow);
ans += tqx*cow + tsum;
}
}
printf("%lld\n", ans);
}
return 0;
}


本文出自 “Flaergwe” 博客,请务必保留此出处http://flaergwe.blog.51cto.com/10217882/1653607
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: