洛谷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\)来说,凑齐一双的情况个数为: \( ...
随机推荐
- Photoshop保存文件时的选项
以 JPEG 格式存储 您可以使用"存储为"命令以 JPEG (*.jpg) 格式存储 CMYK.RGB 和灰度图像.JPEG 通过有选择地扔掉数据来压缩文件大小.也可以使用&qu ...
- Java之Foreach语句
Foreach是for语句的特殊简化版本,但任何时候的foreach语句都可以改写成for语句.Foreach语句在遍历数组等方面为程序员提供了很大的方便 语法如下: For(元素变量 x:遍历对象o ...
- depth peeling实现半透明
aaarticlea/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aH
- Unity "Build failed : Asset is marked as don't save " 解决方案
编译到Android时失败,是字体的原因: -- -- 摘自官方论坛排第二但点赞第一的回答. http://answers.unity3d.com/questions/363963/build-fai ...
- CorelDRAW设计制作超漂亮的3D立体字效果实例教程
第一.打上招聘两个字,选择一个喜欢的字体,如下. 第二.把字体转曲,等待下一步编辑曲线做好准备,如下. 第三.选择形状工具,编辑字体形状,根据自己需要可任意编辑,如下. 第四.适当画一些装饰素材,比如 ...
- Linux基础、常用命令
Linux作为IT程序员必知必会知识,将自己学习到的和最近工作常用的一些命令进行总结,作为我结束过去生活和开始类程序员的序吧! 如果你想系统性学习的话,还是建议看书(鸟哥的Linux私房菜)或网上视频 ...
- vue登录
<template> <section class="wrap-page wrap-page-u" style="padding-top:2rem;&q ...
- [luogu2513 HAOI2009] 逆序对数列 (计数dp)
题目描述 对于一个数列{ai},如果有iaj,那么我们称ai与aj为一对逆序对数.若对于任意一个由1~n自然数组成的数列,可以很容易求出有多少个逆序对数.那么逆序对数为k的这样自然数数列到底有多少个? ...
- javascript 中一些奇葩的日期换算
1.获取今天的0时0分0秒(常用于开始日期的获取) new Date(new Date().toLocaleDateString()); // Mon Nov 12 2018 00:00:00 GMT ...
- Python 爬虫练习: 爬取百度贴吧中的图片
背景:最近开始看一些Python爬虫相关的知识,就在网上找了一些简单已与练习的一些爬虫脚本 实现功能:1,读取用户想要爬取的贴吧 2,读取用户先要爬取某个贴吧的页数范围 3,爬取每个贴吧中用户输入的页 ...