小Z的袜子 hose 2009-国家集训队 bzoj-2038

题目大意:给定一个n个袜子的序列,每个袜子有一个颜色。m次询问:每次询问一段区间中每种颜色袜子个数的平方和。

注释:$1\le n,m\le 5\cdot 10^4$。


想法

莫队算法的第一道例题。

每次左指针和右指针动的时候注意平方即可,

最后,附上丑陋的代码... ...

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
#define N 80050
struct Node
{
int s,t,id;
int ans;
}a[N];
int now;
int n,q,block,pos[N],h[N],c[N];
inline bool cmp1(const Node &x,const Node &y)
{
if(pos[x.s]==pos[y.s]) return x.t<y.t;
return pos[x.s]<pos[y.s];
}
inline bool cmp2(const Node &x,const Node &y)
{
return x.id<y.id;
}
void update(int x,int sig)
{
if(sig==1)
{
now+=h[c[x]];
h[c[x]]++;
}
else
{
now-=h[c[x]]-1;
h[c[x]]--;
}
/*now-=h[c[x]];
h[c[x]]+=sig;
now+=h[c[x]];*/
}
void print(int x)
{
int b=a[x].ans,d=1ll*(a[x].t-a[x].s)*(a[x].t-a[x].s+1)/2;
if(b==0)
{
puts("0/1");return;
}
int gcd=__gcd(b,d);
printf("%d/%d\n",b/gcd,d/gcd);
}
int main()
{
scanf("%d%d",&n,&q);
int i,l,r=0,j;
for(i=1;i<=n;++i) scanf("%d",&c[i]);
if(!n)return 0;
int size=sqrt(n);
block=n/size;
for(i=1;i<=block;++i)
{
l=r+1;
r=i*size;
for(j=l;j<=r;++j)
{
pos[j]=i;
}
}
if(r!=n)
{
l=r+1;
r=n;
block++;
for(i=l;i<=r;++i)
{
pos[i]=block;
}
}
for(i=1;i<=q;++i)scanf("%d%d",&a[i].s,&a[i].t),a[i].id=i;
sort(a+1,a+q+1,cmp1);
for(l=1,r=0,i=1;i<=q;++i)
{
if(a[i].s==a[i].t)
{
a[i].ans=0;
continue;
}
while(l<a[i].s)update(l,-1),l++;
while(l>a[i].s)update(l-1,1),l--;
while(r<a[i].t)update(r+1,1),r++;
while(r>a[i].t)update(r,-1),r--;
a[i].ans=now;
}
sort(a+1,a+q+1,cmp2);
for(i=1;i<=q;i++)
{
print(i);
}
}

小结:莫队真可爱/ka

最新文章

  1. Vim新手入门资料和一些Vim实用小技巧
  2. ubuntu16.04部署RED5流媒体服务器
  3. HashMap和TreeMap的区别
  4. bug_ _fragment的1
  5. VMware workstation 的虚拟机中再安装workstation
  6. JDBC连接mysql编程
  7. 一个APP页面一个接口
  8. 三栏布局之 css3 calc和 flex
  9. Web项目生成详解
  10. mac中安装 RabbitMQ
  11. 用户密码管理和 su 命令
  12. TextKit简单示例
  13. [Practical.Vim(2012.9)].Drew.Neil.Tip21学习摘要
  14. iosg给父类view添加透明度子类也变得透明
  15. redis 管道技术 pipeline 简介
  16. struts,hibernate,spring配置时问题汇总及解决办法
  17. 一个简单好用的强制删除软件geek
  18. springMVC @Component-@Resource-@Repository-@Service-@Controller的区别和理解
  19. HDU 1073 Online Judge(字符串)
  20. 人生苦短之我用Python篇(paramiko模块)

热门文章

  1. “仿QQ局域网聊天软件”项目-常用编程技巧总结
  2. [C陷阱和缺陷] 第2章 语法“陷阱”
  3. 2017杭电多校第五场11Rikka with Competition
  4. 为WebSphere Application Server v8.5安装并配置JDK7
  5. 371 Sum of Two Integers 两整数之和
  6. ubantu MongoDB安装
  7. acm练习-day1
  8. SQLiteOpenHelper学习
  9. 左耳听风 ARTS Week 001
  10. HDU_1506_Largest Rectangle in a Histogram_dp