洛谷P1494 [国家集训队]小Z的袜子
Code:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
# define REP(i,a,n) for(int i=a;i<=n;++i)
# define CLR(d,a)memset(d,a,sizeof(d)); using namespace std; void SetIO(string a){
string in=a+".in";
freopen(in.c_str(),"r",stdin);
} const int maxn=60000+5; int n,m,col[maxn]; struct Asks{
int l,r;
Asks(int l=0,int r=0):l(l),r(r){}
}asks[maxn]; void Read(){
scanf("%d%d",&n,&m); REP(i,1,n)
scanf("%d",&col[i]); REP(i,1,m){
int a,b;
scanf("%d%d",&a,&b);
asks[i]=Asks(a,b);
}
} int block; int belong[maxn], ranking[maxn]; int get_belong(int i){
return (i-1)/block+1;
} bool cmp(int i,int j){
if(belong[asks[i].l]==belong[asks[j].l])
return asks[i].r<asks[j].r;
else
return belong[asks[i].l]<belong[asks[j].l];
} void Build(){
block=sqrt(n); REP(i,1,n)
belong[i]=get_belong(i); REP(i,1,m)
ranking[i]=i; sort(ranking+1,ranking+1+m, cmp);
} long long square[maxn], ans[maxn]; long long cnt[maxn]; long long sum_square=0; void update(int t, int delta){
sum_square-=square[t];
cnt[t]+=delta;
square[t]=cnt[t]*cnt[t];
sum_square+=square[t];
} void Work(){ int l=asks[ranking[1]].l, r=asks[ranking[1]].r; REP(i,l,r)
++cnt[col[i]]; REP(i,1,n){
square[i]=cnt[i]*cnt[i];
sum_square+=square[i];
} REP(i,1,m){ ans[ranking[i]]=sum_square; if(i==m)break; int l2=asks[ranking[i+1]].l;
int r2=asks[ranking[i+1]].r; if(r<r2)
REP(i,r+1,r2) update(col[i],1);
else
for(int i=r;i>r2;--i) update(col[i],-1); if(l>l2)
for(int i=l-1;i>=l2;--i)update(col[i],1);
else
REP(i,l,l2-1)update(col[i],-1); l = l2;
r = r2;
}
} long long gcd(long long a,long long b){
return b==0?a:gcd(b,a%b);
} long long up[maxn], down[maxn]; void Print(){
REP(i,1,m){
int l=asks[i].l;
int r=asks[i].r; if(l==r){
up[i]=0;
down[i]=1;
} else{
int length=r-l+1;
up[i]=ans[i]-length;
down[i]=(long long)length*(length-1); if(up[i]==0){
up[i]=0;
down[i]=1;
continue;
} long long k=gcd(up[i],down[i]);
up[i]/=k;
down[i]/=k;
}
} REP(i,1,m)
printf("%lld/%lld\n",up[i],down[i]);
} int main(){
SetIO("input");
Read();
Build();
Work();
Print();
return 0;
}
洛谷P1494 [国家集训队]小Z的袜子的更多相关文章
- 洛谷 P1494 [国家集训队] 小Z的袜子
题目概述: 小Z把N只袜子从1到N编号,然后从编号L到R(L 尽管小Z并不在意两只袜子是不是完整的一双,甚至不在意两只袜子是否一左一右,他却很在意袜子的颜色,毕竟穿两只不同色的袜子会很尴尬. 你的任务 ...
- 洛谷 P1494 [国家集训队]小Z的袜子(莫队)
题目链接:https://www.luogu.com.cn/problem/P1494 一道很经典的莫队模板题,然而每道莫队题的大体轮廓都差不多. 首先莫队是一种基于分块的算法,它的显著特点就是: 能 ...
- P1494 [国家集训队]小Z的袜子
题目 P1494 [国家集训队]小Z的袜子 解析 在区间\([l,r]\)内, 任选两只袜子,有 \[r-l+1\choose2\] \[=\frac{(r-l+1)!}{2!(r-l-1)!}\] ...
- P1494 [国家集训队]小Z的袜子/莫队学习笔记(误
P1494 [国家集训队]小Z的袜子 题目描述 作为一个生活散漫的人,小\(Z\)每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小\(Z\)再也无法忍受这恼人的找袜子过程,于是他 ...
- P1494 [国家集训队]小Z的袜子(luogu)
P1494 小Z的袜子 终于了解了莫队算法(更专业的名称Square Root Decomposition of Queries) 莫队算法: 一般来说解决静态(实际上也有修改的但复杂度更高)的离线( ...
- P1494 [国家集训队]小Z的袜子(莫队)
题目链接:https://www.luogu.org/problemnew/show/P1494 题目大意:中文题目 具体思路:计算概率的时候,每一次是区间的移动,每一次移动,记得先将原来的记录的影响 ...
- 【luogu P1494 [国家集训队]小Z的袜子】 题解
题目链接:https://www.luogu.org/problemnew/show/P1494 #include <cstdio> #include <algorithm> ...
- luogu P1494 [国家集训队]小Z的袜子 ( 普 通 )
题目: 链接:https://www.luogu.org/problemnew/show/P1494 题意:一些袜子排成一排,每个袜子有固定的颜色. ...
- Luogu P1494 [国家集训队]小Z的袜子
比较简单的莫队题,主要是为了熟练板子. 先考虑固定区间时我们怎么计算,假设区间\([l,r]\)内颜色为\(i\)的袜子有\(cnt_i\)只,那么对于颜色\(i\)来说,凑齐一双的情况个数为: \( ...
随机推荐
- Java操作Kafka执行不成功
使用kafka-clients操作kafka始终不成功,原因不清楚,下面贴出相关代码及配置,请懂得指点一下,谢谢! 环境及依赖 <dependency> <groupId>or ...
- JQuery中text(),html(),val()的区别
这3个都是jquery类库中的语法,分别是: text():获取或者改变指定元素的文本: html():获取或改变指定元素的html元素以及文本: val():获取或者改变指定元素的value值(一般 ...
- [读书笔记] R语言实战 (一) R语言介绍
典型数据分析的步骤: R语言:为统计计算和绘图而生的语言和环境 数据分析:统计学,机器学习 R的使用 1. 区分大小写的解释型语言 2. R语句赋值:<- 3. R注释: # 4. 创建向量 c ...
- qt quick中qml编程语言
Qt QML 入门 — 使用C++定义QML类型 发表于 2013 年 3 月 11 日 注册C++类 注册可实例化的类型 注册不实例化的QML类型 附带属性 注册C++类 注册可实例化的类型 如 ...
- [luogu] P2354 [NOI2014]随机数生成器 (贪心)
Description Input 第1行包含5个整数,依次为 x_0,a,b,c,d ,描述小H采用的随机数生成算法所需的随机种子.第2行包含三个整数 N,M,Q ,表示小H希望生成一个1到 N×M ...
- jsonp实现原理
jquery 封装在 ajax方法 里面的jsonp jsonp跨域的原理 1:使用script 标签发送请求,这个标签支持跨域访问 2:在script 标签里面给服务器端传递 ...
- oracle用户锁定
https://www.cnblogs.com/lostyue/archive/2011/12/06/2278063.html
- HDU 1211
水.模拟即可.使用EXGCD求逆元 #include <iostream> #include <cstdio> #include <cstring> #includ ...
- JAVA设计模式之【适配器模式】
适配器模式 当不需要实现一个接口所提供的所有方法时,可先设计一个抽象类该接口,并为接口每个方法提供一个默认实现 该抽象类的子类可以选择性地覆盖父类的某些方法来实现需求 角色 适配者接口 通常在接口中声 ...
- nyoj--90--整数划分(母函数)
整数划分 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 将正整数n表示成一系列正整数之和:n=n1+n2+-+nk, 其中n1≥n2≥-≥nk≥1,k≥1. 正整数 ...