[2009国家集训队]小Z的袜子(hose)(莫队算法)
2014-03-25 15:21
316 查看
之前做的一道CF题就是这样的,这题还要简单一点,把查询分块,不同块的按块排序,同一块的按右区间排序。每次把当前的区间[L,R]调整到目标区间[L',R'],然后计算就行了。
代码:
代码:
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<algorithm> #include<map> #include<queue> #include<stack> #include<set> #include<cmath> #include<vector> #define inf 0x3f3f3f3f #define Inf 0x3FFFFFFFFFFFFFFFLL #define eps 1e-9 #define pi acos(-1.0) using namespace std; typedef long long ll; const int maxn=50000+10; const int Size=255; struct Querys { int L,R,id; bool operator <(const Querys & a) const { if(L/Size!=a.L/Size) return L<a.L; return R<a.R; } }querys[maxn]; int c[maxn],wz[maxn],n,m; ll ans[maxn][2],res; ll gcd(ll a,ll b) {return b==0?a:gcd(b,a%b);} inline ll cal(ll x) { if(x<2) return 0; return x*(x-1)/2; } void Add(int x) { res-=cal(c[wz[x]]); res+=cal(c[wz[x]]+1); c[wz[x]]++; } void Dec(int x) { res-=cal(c[wz[x]]); res+=cal(c[wz[x]]-1); c[wz[x]]--; } void solve() { memset(c,0,sizeof(c)); res=0; int l=1,r=0,p; ll d; for(int i=0;i<m;++i) { while(l<querys[i].L) Dec(l++); while(l>querys[i].L) Add(--l); while(r<querys[i].R) Add(++r); while(r>querys[i].R) Dec(r--); p=querys[i].id; ans[p][0]=res; ans[p][1]=(ll)(r-l+1)*(r-l)/2; d=gcd(ans[p][0],ans[p][1]); ans[p][0]/=d;ans[p][1]/=d; } } int main() { //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); scanf("%d%d",&n,&m); for(int i=1;i<=n;++i) scanf("%d",&wz[i]); for(int i=0;i<m;++i) { scanf("%d%d",&querys[i].L,&querys[i].R); querys[i].id=i; } sort(querys,querys+m); solve(); for(int i=0;i<m;++i) printf("%lld/%lld\n",ans[i][0],ans[i][1]); return 0; }
相关文章推荐
- bzoj 2038: [2009国家集训队]小Z的袜子(hose)(莫队算法)
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose) (莫队算法)
- bzoj 2038 [2009国家集训队]小Z的袜子(hose)(莫队算法)
- 莫队算法 (dsy)2038: [2009国家集训队]小Z的袜子(hose)
- bzoj2038: [2009国家集训队]小Z的袜子(hose) 莫队算法(分块)
- kyeremal-bzoj2038-[2009国家集训队]-小z的袜子(hose)-莫队算法
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose)(莫队算法)
- kyeremal-bzoj2038-[2009国家集训队]-小z的袜子(hose)-莫队算法
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose) [莫队算法]【学习笔记】
- bzoj 2038: [2009国家集训队]小Z的袜子(hose) (莫队算法)
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose)&&莫队算法
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose)(莫队算法)
- 大视野在线测评:2038: [2009国家集训队]小Z的袜子(hose) 莫队算法,分块处理
- [BZOJ2038] [2009国家集训队]小Z的袜子(hose) 莫队算法练习
- BZOJ 2038 [2009国家集训队]小Z的袜子(hose) (莫队算法)
- Bzoj 2038---[2009国家集训队]小Z的袜子(hose) 莫队算法
- BZOJ2038: [2009国家集训队]小Z的袜子(hose) -- 莫队算法 ,,分块
- bzoj2038 : [2009国家集训队]小Z的袜子(hose) 莫队算法
- BZOJ2038: [2009国家集训队]小Z的袜子(hose) 莫队算法
- BZOJ 2038 2009国家集训队 小Z的袜子(hose) 莫队算法