HYSBZ 2038 小Z的袜子 莫队算法
来源:互联网 发布:美国p2p软件 编辑:程序博客网 时间:2024/06/02 20:48
#include <cstdio>#include <iostream>#include <set>#include <vector>#include <cstring>#include <string>#include <algorithm>#include <cmath>#include <map>#include <queue>#include <iomanip>using namespace std;const int size=111111;typedef long long ll;typedef double dd;typedef pair<int,int> P;int n,m,a[size];int Q[size],cnt;ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}struct node{ int l,r,id;}b[size];int cmp(node a,node b){ return Q[a.l]<Q[b.l]||(Q[a.l]==Q[b.l]&&a.r<b.r);}ll ans,num[size],ret[size],len[size];ll add(int a,int k){ ll ret=num[a]*num[a]; num[a]+=k; return num[a]*num[a]-ret;}void work(){ int l=1,r=num[a[1]]=ans=1; for(int i=0;i<m;i++){ while(b[i].r>r)r++,ans+=add(a[r],1); while(b[i].r<r)ans+=add(a[r],-1),r--; while(b[i].l>l)ans+=add(a[l],-1),l++; while(b[i].l<l)l--,ans+=add(a[l],1); ret[b[i].id]=ans; }}int main(){ while(cin>>n>>m){ cnt=sqrt(n); for(int i=1;i<=n;i++){ scanf("%d",&a[i]); num[a[i]]=0; Q[i]=(i-1)/cnt+1; } for(int i=0;i<m;i++){ scanf("%d%d",&b[i].l,&b[i].r); b[i].id=i; len[i]=b[i].r-b[i].l+1; } sort(b,b+m,cmp); work(); for(int i=0;i<m;i++){ ll _g=gcd(ret[i]-len[i],len[i]*(len[i]-1)); printf("%lld/%lld\n",(ret[i]-len[i])/_g,len[i]*(len[i]-1)/_g); } }}
0 0
- HYSBZ 2038 小z的袜子(hose) 莫队算法
- HYSBZ 2038 小Z的袜子 莫队算法
- HYSBZ 2038 小Z的袜子(hose) (莫队算法)
- 文章标题 HYSBZ 2038 : 小Z的袜子(hose) (莫队算法)
- HYSBZ 2038 小Z的袜子(hose)
- 【莫队算法】小z的袜子
- 小Z的袜子(莫队算法)
- 小Z的袜子【莫队算法】
- 小Z的袜子【莫队算法】
- 莫队算法 小Z的袜子
- hysbz 2038 小Z的袜子(莫队)
- 小Z的袜子(hose) HYSBZ
- 小Z的袜子(hose) HYSBZ
- 小Z的袜子(hose) HYSBZ
- 线性莫队算法 BZOJ 2038 小Z的袜子
- 小Z的袜子(hose) - bzoj 2038 莫队算法
- 大视野2038 小z的袜子 莫队算法
- syhbz 2038 小z的袜子(莫队算法)
- 文本切换
- 使用selenium抓取JS动态生成的页面
- opencv sobel导数
- 选择排序
- (一)mybatis+mysql 基本环境搭建
- HYSBZ 2038 小Z的袜子 莫队算法
- leetcode之路029 Divide Two Integers
- Java 修饰符
- 二叉树的镜像
- 机器学习算法之决策树算法
- OpenCV函数 Laplacian 算子实现
- 【转自看雪】反编译apk+eclipse中动态调试smali
- 冒泡排序法
- 487--3279