uva 1428 - Ping pong(树状数组)

来源:互联网 发布:linux误删除文件夹恢复 编辑:程序博客网 时间:2024/05/20 19:31

题目链接:uva 1428 - Ping pong

题目大意:一条大街上住着n个乒乓球爱好者,经常组织比赛。每个人都有一个不同的能力值,每场比赛需要3个人,裁判要住在两个选手之间,并且能力值也要在选手之间,问说最多能举行多少场比赛。

解题思路:预处理出bici分别表示说在1~i中能力值比第i个人小的人和i+1~n中能力值比第i个人小的。处理过程用树状数组维护即可。

#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define lowbit(x) ((x)&(-x))const int maxn = 1e5;typedef long long ll;int n, s[maxn+5];int N, a[maxn+5];ll b[maxn+5];void add (int x, int v) {    while (x <= n) {        s[x] += v;        x += lowbit(x);    }}int sum (int x) {    int ret = 0;    while (x > 0) {        ret += s[x];        x -= lowbit(x);    }    return ret;}int main () {    int cas;    scanf("%d", &cas);    while (cas--) {        scanf("%d", &N);        n = 0;        memset(s, 0, sizeof(s));        for (int i = 1; i <= N; i++) {            scanf("%d", &a[i]);            n = max(a[i], n);        }        for (int i = 1; i <= N; i++) {            b[i] = sum(a[i]-1);            //printf("%lld ", b[i]);            add(a[i], 1);        }        //printf("\n");        ll ans = 0;        memset(s, 0, sizeof(s));        for (int i = N; i > 0; i--) {            ll d = sum(a[i]-1);            add(a[i], 1);            ans += (b[i] * (N - i - d)) + d * (i - 1 - b[i]);        }        printf("%lld\n", ans);    }    return 0;}
2 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 加盟天猫优品不想干了怎么办 口袋侦探点开始就闪退怎么办 淘宝号被监控了怎么办 excel表格中把字体变细怎么办 wps方框中打字打不上怎么办 蘑菇街里面买东西受骗了怎么办? 淘宝买家号账户体检中心违规怎么办 支付宝充错手机账号怎么办 美团恶意差评怎么办 买家好评后追加差评怎么办 宝贝吃了一个金币怎么办 店铺微淘等级l1怎么办 淘宝占内存2个g怎么办 淘宝太占空间了怎么办 支付宝占内存大怎么办 苹果手机储存空间不足怎么办 小米平板电脑储存空间不足怎么办 ipad2很卡反应慢怎么办 ipadmini很卡反应慢怎么办 手机酷狗音乐文件不支持怎么办 2018款ipad闪退怎么办 ipad开不了机了怎么办 淘宝盖楼上限了怎么办 交了学费做微淘客却加不到人怎么办 微淘客交首付不想做了怎么办 蚂蚁微客二维码推广怎么办 游拍主播申请手机号被注册怎么办 淘宝客不给力怎么办 淘宝买家确认收货超时怎么办 淘宝没收到货退款卖家不处理怎么办 微博红包都是字怎么办 500个访客没转化怎么办 店铺动态评分是0怎么办 京东店铺评分低怎么办 被淘宝主播屏蔽怎么办 在淘宝客推广后退款怎么办 生产出现异常时你应该怎么办 违规后的店铺没访客怎么办 淘宝少发货店家不承认怎么办 淘宝买东西店家不发货怎么办 淘宝店家拒绝同意退款怎么办