UVALive 5990 Array Diversity
2015-09-28 00:45
459 查看
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26408
#include <iostream> #include <algorithm> #include <cstdio> #include <cstring> #include <cstdlib> #include <cmath> using namespace std; typedef unsigned long long ll; const int N=100010; const int mod=1000000007; ll p ; int a ; int n; void init() { p[0]=1; for(int i=1; i<N; i++)p[i]=p[i-1]*2%mod; } int main() { int t; init(); cin>>t; while(t--) { scanf("%d",&n); int mi=1001000,ma=-1; for(int i=1; i<=n; i++) { scanf("%d",&a[i]); mi=min(mi,a[i]); ma=max(ma,a[i]); } if(mi==ma) { printf("%lld %lld\n",(ll)n*(n+1)/2%mod,(ll)(p -1+mod)%mod); continue; } int l=-1,r=-1,k=0; bool fa=0,fi=0; ll ans=0; for(int i=1; i<=n; i++) { ///连续的 if(a[i]==mi||a[i]==ma) { if(l==-1)l=i; else if(a[l]==a[i])l=i; else r=i; if(a[i]==mi)fi=1; else fa=1; } if(fa&&fi) { ans=(ans+(ll)(n-r)*(l-1-k)%mod+1+(n-r)+(l-1-k))%mod; if(a[l]==mi)fi=0; else fa=0; k=l; l=r; continue; } } sort(a+1,a+n+1); ll res=0; int i=2,ii=1; while(i<n&&a[i]==a[1])i++,ii++; int j=n-1,jj=1; while(a[j]==a &&j>=1)j--,jj++; res=(p[ii]-1)*(p[jj]-1)%mod*(p[n-jj-ii])%mod;///不连续的 printf("%lld %lld\n",ans,res); } return 0; }
相关文章推荐
- BAT带队烧钱圈地华为们猛追云计算
- 【转载,万人坑】const char*, char const*, char*const的区别
- Hbase用户权限
- c++设计模式-----observer(观察者模式)
- 读《 江西59岁老人用鼠药结束了妻子性命》有感
- oracle交流趣事--主机名变更在跑某报告信息时变更的小细节
- 获取当前程序可执行文件的所在路径
- select样式美化
- [九度OnlineJudge][剑指Offer]题目1387:斐波那契数列
- OJ学习笔记2
- CSS按钮样式分享
- HDU 4293 Groups(dp)
- GitHub入门与实践一
- IOS中内存的分配
- apache双向HTTPS SSL认证配置
- DirectX 初始化DirectX(第一方式)
- Aggregate Class(聚合类)的使用
- 优化LINUX内核阻挡SYN洪水攻击
- 设计模式之单例、多例模式
- LintCode -- 不同的子序列