分母是一定的C(m,3) 树状数组求每一个数能够在那些段中出现,若x出如今了s段中,分子加上w[x]*C(s,3)

Victor and Toys

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/131072 K (Java/Others)

Total Submission(s): 331    Accepted Submission(s): 118

Problem Description
Victor has n toys,
numbered from 1 to n.
The beauty of the i-th
toy is wi.



Victor has a sense of math and he generates m intervals,
the i-th
interval is [li,ri].
He randomly picks 3 numbers i,j,k(1≤i<j<k≤m),
and selects all of the toys whose number are no less than max(li,lj,lk) and
no larger than min(ri,rj,rk).
Now he wants to know the expected sum of beauty of the selected toys, can you help him?
 
Input
The first line of the input contains an integer T,
denoting the number of test cases.



In every test case, there are two integers n and m in
the first line, denoting the number of the toys and intervals.



The second line contains n integers,
the i-th
integer wi denotes
that the beauty of the i-th
toy.



Then there are m lines,
the i-th
line contains two integers li and ri.



1≤T≤10.



1≤n,m≤50000.



1≤wi≤5.



1≤li≤ri≤n.
 
Output
Your program should print T lines
: the i-th
of these denotes the answer of the i-th
case.



If the answer is an integer, just print a single interger, otherwise print an irreducible fraction like p/q.
 
Sample Input
1
3 4
1 1 5
2 3
1 3
3 3
1 1
 
Sample Output
5/4
 
Source
 

/* ***********************************************
Author :CKboss
Created Time :2015年08月23日 星期日 14时23分47秒
File Name :HDOJ5419.cpp
************************************************ */ #include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <string>
#include <cmath>
#include <cstdlib>
#include <vector>
#include <queue>
#include <set>
#include <map> using namespace std; typedef unsigned long long int LL; const int maxn=50500; /****************BIT***********************/ int n,m;
int w[maxn];
int l[maxn],r[maxn]; inline int lowbit(int x) { return x&(-x); } int tree[maxn]; void add(int p,int v)
{
for(int i=p;i<maxn;i+=lowbit(i)) tree[i]+=v;
} int sum(int p)
{
int ret=0;
for(int i=p;i;i-=lowbit(i)) ret+=tree[i];
return ret;
} LL getC(LL x)
{
return x*(x-1)/2LL*(x-2)/3LL;
} LL gcd(LL a,LL b)
{
if(b==0) return a;
return gcd(b,a%b);
} int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout); int T_T;
scanf("%d",&T_T);
while(T_T--)
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) scanf("%d",w+i);
memset(tree,0,sizeof(tree));
for(int i=0;i<m;i++)
{
scanf("%d%d",l+i,r+i);
add(l[i],1); add(r[i]+1,-1);
} if(m<3) { puts("0"); continue; } LL up=0,down=getC(m);
for(int i=1;i<=n;i++)
{
LL x=sum(i);
if(x>=3)
{
up=up+w[i]*getC(x);
}
}
if(up==0) { puts("0"); continue; } LL g=gcd(up,down);
if(g==down) cout<<up/g<<endl;
else cout<<up/g<<"/"<<down/g<<endl;
} return 0;
}

最新文章

  1. 使用httpclient 调用selenium webdriver
  2. SQL用先进先出存储过程求出库数量
  3. jQuery属性操作
  4. weborm 简单控件
  5. asp.net webform 与mvc 共享session
  6. 50元制作PS2键盘无线监控装置
  7. Python子类方法的调用(类方法)
  8. 动态更换view类的背景---StateListDrawable的应用
  9. maven占位符
  10. php框架练习
  11. Android 聊天气泡
  12. netty-all maven中 缺少jzlib
  13. 【子非鱼】归并排序过程呈现之java内置GUI表示
  14. MySQL flashback 功能
  15. Rails 4.0 bundle exec rspec spec/requests/xxx 测试失败的解决
  16. Cocos Creator LabelAtlas(艺术数字的使用)
  17. Petrozavodsk Winter Camp, Warsaw U, 2014, A The Carpet
  18. OpenCV3如何使用SIFT和SURF Where did SIFT and SURF go in OpenCV 3?
  19. Web服务器软件 (Tomcat)
  20. Python学习笔记【第十篇】:Python面向对象进阶

热门文章

  1. 继承—Car
  2. Linux 玩法
  3. canvas指定的宽高写在行间和写在style里面的区别?
  4. 我的Spring MVC第一个应用 (最终版)
  5. sublime text3之修改注释颜色
  6. 去除input的前后的空格
  7. 创建支持SSH服务的镜像
  8. js001 ---- async
  9. P4555 [国家集训队]最长双回文串(回文树)
  10. HDU 4928 Series 2