★★☆   输入文件:1flower.in   输出文件:1flower.out   简单对比
时间限制:5 s   内存限制:128 MB

【题目描述】

萧薰儿是古国的公主,平时的一大爱好是采花。
今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花。花园足够大,容纳了n朵花,花有c种颜色(用整数1-c表示),且花是排成一排的,以便于公主采花。公主每次采花后会统计采到的花的颜色数,颜色数越多她会越高兴!同时,她有一癖好,她不允许最后自己采到的花中,某一颜色的花只有一朵。为此,公主每采一朵花,要么此前已采到此颜色的花,要么有相当正确的直觉告诉她,她必能再次采到此颜色的花。由于时间关系,公主只能走过花园连续的一段进行采花,便让女仆福涵洁安排行程。福涵洁综合各种因素拟定了m个行程,然后一一向你询问公主能采到多少朵花(她知道你是编程高手,定能快速给出答案!),最后会选择令公主最高兴的行程(为了拿到更多奖金!)。

【输入格式】

 第一行四个空格隔开的整数n、c以及m。接下来一行n个空格隔开的整数,每个数在[1, c]间,第i个数表示第i朵花的颜色。接下来m行每行两个空格隔开的整数l和r(l ≤ r),表示女仆安排的行程为公主经过第l到第r朵花进行采花。

【输出格式】

 
共m行,每行一个整数,第i个数表示公主在女仆的第i个行程中能采到的花的颜色数。

【样例输入】

5  3 5
1 2 2 3 1
1 5
1 2
2 2
2 3
3 5

【样例输出】

2
0 0 1 0
【样例说明】
询问[1, 5]:公主采颜色为1和2的花,由于颜色3的花只有一朵,公主不采;询问[1, 2]:颜色1和颜色2的花均只有一朵,公主不采;
询问[2, 2]:颜色2的花只有一朵,公主不采;
询问[2, 3]:由于颜色2的花有两朵,公主采颜色2的花;
询问[3, 5]:颜色1、2、3的花各一朵,公主不采。

【提示】

【数据范围】

对于100%的数据,1 ≤ n ≤    10^6,c ≤ n,m ≤10^6。

【来源】

 

【题目来源】

耒阳大世界(衡阳八中) OJ 2743

居然有人说莫队过不了 哈哈哈

完美卡过~

屠龙宝刀点击就送

① 莫队

15.38s

#include <algorithm>
#include <cstdio>
#include <cctype>
#include <cmath>
#define N 1000005
using namespace std;
template<typename T>
inline void Read(T &x)
{
register char ch=getchar();
for(x=;!isdigit(ch);ch=getchar());
for(;isdigit(ch);x=x*+ch-'',ch=getchar());
}
struct node
{
int l,r,bel,id,ans;
}opt[N];
int n,c,m,col[N],sum[N],ans,Ans[N];
bool cmp(node a,node b)
{
if(a.bel!=b.bel) return a.bel<b.bel;
else return a.r<b.r;
}
void update(int pos,int v,int type)
{
sum[col[pos]]+=v;
if(sum[col[pos]]==type) ans+=v;
}
int main(int argc,char *argv[])
{
freopen("1flower.in","r",stdin);
freopen("1flower.out","w",stdout);
Read(n);Read(c);Read(m);
for(int i=;i<=n;++i) Read(col[i]);
int C=sqrt(n);
for(int i=;i<=m;++i)
{
Read(opt[i].l);Read(opt[i].r);
opt[i].bel=(opt[i].l-)/C+;
opt[i].id=i;
}
sort(opt+,opt++m,cmp);
for(int L=,R=,i=;i<=m;++i)
{
while(L<opt[i].l) update(L++,-,);
while(L>opt[i].l) update(--L,,);
while(R<opt[i].r) update(++R,,);
while(R>opt[i].r) update(R--,-,);
Ans[opt[i].id]=ans;
}
for(int i=;i<=m;++i) printf("%d ",Ans[i]);
return ;
fclose(stdin);
fclose(stdout);
}

② 离线树状数组

2.021 s (Rank 1蛤蛤)

#include <algorithm>
#include <cstdio>
#include <cctype>
#define N 1000005
#define BUF 25312312 using namespace std;
char Buf[BUF],*buf=Buf;
template<typename T>
inline void Read(T &x)
{
for(x=;!isdigit(*buf);++buf);
for(;isdigit(*buf);x=x*+*buf-'',++buf);
}
inline int lowbit(int x){return x&(-x);}
int n,c,m,nextt[N],pre[N],col[N],ans[N],tag[N];
struct node
{
int l,r,id;
}opt[N];
bool cmp(node a,node b){return a.l<b.l;}
inline void update(int x,int v)
{
for(;x<=n;x+=lowbit(x)) tag[x]+=v;
}
inline int ask(int x)
{
int ret=;
for(;x;x-=lowbit(x)) ret+=tag[x];
return ret;
}
int Main()
{
freopen("1flower.in","r",stdin);
freopen("1flower.out","w",stdout);
fread(buf,,BUF,stdin);
Read(n);Read(c);Read(m);
for(int i=;i<=n;++i) Read(col[i]);
for(int i=n;i>=;--i) nextt[i]=pre[col[i]],pre[col[i]]=i;
for(int i=;i<=c;++i)
if(nextt[pre[i]])
update(nextt[pre[i]],);
for(int i=;i<=m;++i) Read(opt[i].l),Read(opt[i].r),opt[i].id=i;
sort(opt+,opt++m,cmp);
int L=;
for(int i=;i<=m;++i)
{
while(L<opt[i].l)
{
if(nextt[L]) update(nextt[L],-);
if(nextt[nextt[L]]) update(nextt[nextt[L]],);
L++;
}
ans[opt[i].id]=ask(opt[i].r)-ask(opt[i].l-);
}
for(int i=;i<=m;++i) printf("%d\n",ans[i]);
return ;
}
int sb=Main();
int main(int argc,char *argv[]){;}

COGS 1619. [HEOI2012]采花的更多相关文章

  1. cogs:1619. [HEOI2012]采花/luogu P2056

    1619. [HEOI2012]采花 ★★☆   输入文件:1flower.in   输出文件:1flower.out   简单对比时间限制:5 s   内存限制:128 MB [题目描述] 萧薰儿是 ...

  2. 1619. [HEOI2012]采花

    1619. [HEOI2012]采花 ★★☆   输入文件:1flower.in   输出文件:1flower.out   简单对比 时间限制:5 s   内存限制:128 MB [题目描述] 萧薰儿 ...

  3. cogs1619. [HEOI2012]采花 x

    1619. [HEOI2012]采花 ★★☆   输入文件:1flower.in   输出文件:1flower.out   简单对比时间限制:5 s   内存限制:128 MB [题目描述] 萧薰儿是 ...

  4. BZOJ 2743: [HEOI2012]采花

    2743: [HEOI2012]采花 Time Limit: 15 Sec  Memory Limit: 128 MBSubmit: 2056  Solved: 1059[Submit][Status ...

  5. [bzoj2743][HEOI2012]采花(树状数组+离线)

    2743: [HEOI2012]采花 Time Limit: 15 Sec  Memory Limit: 128 MBSubmit: 1832  Solved: 954[Submit][Status] ...

  6. BZOJ 2743: [HEOI2012]采花( 离线 + BIT )

    处理出每个数下一个出现的位置, 然后按左端点排序回答询问.处理当前数去除的影响 ------------------------------------------------------------ ...

  7. BZOJ_2743_[HEOI2012]采花_离线+树状数组

    BZOJ_2743_[HEOI2012]采花_离线+树状数组 Description 萧芸斓是Z国的公主,平时的一大爱好是采花.今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花 .花园足够大 ...

  8. BZOJ 2743: [HEOI2012]采花 离线树状数组

    2743: [HEOI2012]采花 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=2743 Description 萧芸斓是Z国的公主, ...

  9. 【BZOJ2743】[HEOI2012]采花 离线+树状数组

    [BZOJ2743][HEOI2012]采花 Description 萧芸斓是Z国的公主,平时的一大爱好是采花. 今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花.花园足够大,容纳了n朵花, ...

随机推荐

  1. Swoole 协程 MySQL 客户端与异步回调 MySQL 客户端的对比

    Swoole 协程 MySql 客户端与 异步回调 MySql 客户端的对比 为什么要对比这两种不同模式的客户端? 异步 MySQL 回调客户端是虽然在 Swoole 1.8.6 版本就已经发布了, ...

  2. java中多个线程访问共享数据的方式有哪些

    多个线程对共同数据的访问的实现,要根据情况而定 (1)当访问共同的代码的时候:可以使用同一个Runnable对象,这个Runnable对象中有这个共享数据,比如卖票系统就可以这么做.或者这个共享数据封 ...

  3. 反射学习:(System.Reflection)

    反射为了动态(运行时动态) 原理:读取metadata(?)   Assembly assembly = Assembly.Load("TestReflections");//反射 ...

  4. null, undefined 和布尔值

    说明:此类博客来自以下链接,对原内容做了标注重点知识,此处仅供自己学习参考! 来源:https://wangdoc.com/javascript/basic/introduction.html 1.n ...

  5. 无监督学习:Deep Auto-encoder(深度自动编码器)

    一 Auto-encoder NN Encoder & NN Decoder 要一起训练. 二 Starting from PCA 三 Deep Auto-encoder PCA&De ...

  6. 洛谷 - P2324 - 骑士精神 - A*搜索

    为什么估价是16,因为最后一步复原空格可以恢复两个位置,当然设成17.18都可以. #include<bits/stdc++.h> using namespace std; typedef ...

  7. sql server 2012 profiler打开2016的profiler

    软件环境:1.本机是sql server 2012,远程服务器是sql server 20162.本机是Windows 7,安装不了sql server 2016 问题场景1:本机sql server ...

  8. SpringBoot2.0 基础案例(11):配置AOP切面编程,解决日志记录业务

    本文源码 GitHub地址:知了一笑 https://github.com/cicadasmile/spring-boot-base 一.AOP切面编程 1.什么是AOP编程 在软件业,AOP为Asp ...

  9. SpringBoot2.0 基础案例(10):整合Mybatis框架,集成分页助手插件

    一.Mybatis框架 1.mybatis简介 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获 ...

  10. Mac环境下制作ubantu安装盘

    前言:ubantu为Linux发行版之一,此方法亦可制作其他Linux发行版 1.在磁盘工具中将准备好的u盘格式化为Mac OS扩展(日志型),并确保分区的模式是GUID分区 2.官网自行下载uban ...