题目传送门(内部题32)


输入格式

第一行,三个正整数$n,m,q$。
第二行,$n$个正整数$a_i$,保证$1\leqslant a_i\leqslant n$。
接下来$q$行,每行两个正整数$k,l$,保证$k<l$。


输出格式

输出$q$行,表示每个旅行计划询问的答案。


样例

样例输入:

7 2 7
6 1 3 6 4 6 5
1 2
4 6
2 7
6 7
1 2
1 4
2 6

样例输出:

1
4
35
1
1
10
20


数据范围与提示

对于$20\%$的数据,$2\leqslant n,q\leqslant 100$。
对于$40\%$的数据,$2\leqslant n,q\leqslant 1,000$。
对于$80\%$的数据,$2\leqslant n,q\leqslant 10,000$。
对于$100\%$的数据,$2\leqslant n,q\leqslant 100,000,1\leqslant m\leqslant n,1\leqslant a_i\leqslant n,1\leqslant k < l\leqslant n$。


题解

我们可以$\Theta(n^2)$的时间内求出对于每个左端点,最靠左的不乏味点的位置。

维护四个前缀和。

对于每一次询问,二分求出右端点,然后$\Theta(1)$前缀和就好了。

时间复杂度:$\Theta(n^2+q\log n)$。

期望得分:$100$分。

实际得分:$100$分。


代码时刻

#include<bits/stdc++.h>
using namespace std;
int n,m,q;
int a[100001],sum,vis[100001];
long long cnt[100001];
pair<pair<long long,long long>,pair<long long,long long> > pos[100001];
int main()
{
scanf("%d%d%d",&n,&m,&q);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
cnt[i]=n+1;
}
vis[0]=sum=1;
for(int i=1;i<=n;i++)
{
vis[a[i-1]]--;
if(vis[a[i-1]]){cnt[i]=cnt[i-1];continue;}
sum--;
for(int j=cnt[i-1]+1;j<=n;j++)
{
if(!vis[a[j]])sum++;
vis[a[j]]++;
if(sum>=m)
{
cnt[i]=j;
break;
}
}
}
for(int i=1;i<=n;i++)
{
pos[i].first.first=pos[i-1].first.first+i;
pos[i].second.first=pos[i-1].second.first+i*cnt[i];
pos[i].first.second=pos[i-1].first.second+cnt[i];
pos[i].second.second=pos[i-1].second.second+cnt[i]*cnt[i];
}
while(q--)
{
long long l,r;
scanf("%lld%lld",&l,&r);
long long mid=upper_bound(cnt+l,cnt+r+1,r)-cnt-1;
printf("%lld\n",((r*r+r)*(mid-l+1)-((r+1)*(pos[mid].first.first-pos[l-1].first.first)<<1)+pos[mid].first.second-pos[l-1].first.second+((pos[mid].second.first-pos[l-1].second.first)<<1)-pos[mid].second.second+pos[l-1].second.second)>>1);
}
return 0;
}

rp++

[CSP-S模拟测试]:计划(前缀和)的更多相关文章

  1. 利用Python中的mock库对Python代码进行模拟测试

    这篇文章主要介绍了利用Python中的mock库对Python代码进行模拟测试,mock库自从Python3.3依赖成为了Python的内置库,本文也等于介绍了该库的用法,需要的朋友可以参考下     ...

  2. Mac下Jmeter快速安装与入门-模拟测试Post请求及设置Http头

    [1]去Apache官网下载 Binaries系列的最新Jmeter.gz包 [2]下载到本地之后解压缩,进入到解压之后的目录然后,找到apache-jmeter-4.0/bin/jmeter.sh ...

  3. Python 的mock模拟测试介绍

    如何不靠耐心测试 可能我们正在写一个社交软件并且想测试一下"发布到Facebook的功能",但是我们不希望每次运行测试集的时候都发布到Facebook上. Python的unitt ...

  4. 【转】利用Python中的mock库对Python代码进行模拟测试

    出处 https://www.toptal.com/python/an-introduction-to-mocking-in-python http://www.oschina.net/transla ...

  5. noi2019模拟测试赛(四十七)

    noi2019模拟测试赛(四十七) T1与运算(and) 题意: ​ 给你一个序列\(a_i\),定义\(f_i=a_1\&a_2\&\cdots\&a_i\),求这个序列的所 ...

  6. csp-s模拟测试91

    csp-s模拟测试91 倒悬吃屎的一套题. $T1$认真(?)分析题意发现复杂度不能带$n$(?),计划直接维护答案,考虑操作对答案的影响,未果.突然发现可以动态开点权值线段树打部分分,后来$Tm$一 ...

  7. csp-s模拟测试83(集训过半)

    csp-s模拟测试83(集训过半) 一场信心赛.起初$OJ$爆了我就看见全场$A$了$T1$并且夹杂着$A$掉$T2$我就很难受. 这场比赛没有深入思考,很失败,一个多小时后就结束了我罪恶的一生. 0 ...

  8. 2019.8.14 NOIP模拟测试21 反思总结

    模拟测试20的还没改完先咕着 各种细节问题=错失190pts T1大约三分钟搞出了式子,迅速码完,T2写了一半的时候怕最后被卡评测滚去交了,然后右端点没有初始化为n…但是这样还有80pts,而我后来还 ...

  9. 2019.8.9 NOIP模拟测试15 反思总结

    日常爆炸,考得一次比一次差XD 可能还是被身体拖慢了学习的进度吧,虽然按理来说没有影响.大家听的我也听过,大家学的我也没有缺勤多少次. 那么果然还是能力问题吗……? 虽然不愿意承认,但显然就是这样.对 ...

随机推荐

  1. paper 165: 人脸的两个关键问题--光照和姿态

    人脸识别关键问题研究 a) 人脸识别中的光照问题 光照变化是影响人脸识别性能的最关键因素,对该问题的解决程度关系着人脸识别实用化进程的成败.研究思路是将在对其进行系统分析的基础上,考虑对其进行量化研究 ...

  2. JAVA(JDK,JRE)更改目录安装及环境变量配置

    重温一下 JAVA(JDK,JRE)更改目录安装及环境变量配置 https://jingyan.baidu.com/article/e2284b2b5b7ae5e2e7118d11.html 备注:随 ...

  3. 从xxxx检测到有潜在危险的 Request.Form 提示黄页

    相信很多朋友都遇到过"从客户端xxxxxx"检测到有潜在危险的 Request.Form 然后给一个黄页提示.然后检测代码又找不到错误的代码提示. 原因:是因为在页面里边使用了富文 ...

  4. java String 类特点

    String的设计是一个典型的单一模式 String str1="AAAA":String str2="AAAA": 这生成两个对象吗?不是.在内存中,这是同一 ...

  5. Iterator,foreach遍历小计

    此博客对同一操作对比两种遍历方式,以个人忘记时快速捡起为目的. 数据表: 三个List: List<Menu> menuList=menuService.getAllMenus(query ...

  6. 基于windows下,node.js之npm

    1.下载node.js一路安装下去 在开始 node文件夹下,打开cmd 2.创建一个开发目录 mkdir reactQa && cd reactQa 3.初始化一个nmp的开发环境 ...

  7. SQL语句:随机取3条不重复的记录

    随机取3条不重复的记录 [Access]select top 3 * from tablename order by rnd(id); [SqlServer]select top 3 * from t ...

  8. 记C函数指针的“小坑”

    今天遇到一个C函数指针的小坑,索性记下来. 我在a.c 文件里面,引用b.c 文件的函数声明作为指针引用 比如在a.c生命一个函数指针 typedef void (*free)(void *val) ...

  9. Python多进程、多线程和协程简介

    一.进程和线程 进程是一个执行中的程序.每个进程都拥有自己的地址空间.内存.数据栈以及其他用于跟踪执行的辅助数据.在单核CPU系统中的多进程,内存中可以有许多程序,但在给定一个时刻只有一个程序在运行: ...

  10. spring注解开发:容器中注册组件方式

    1.包扫描+组件标注注解 使用到的注解如下,主要针对自己写的类 @Controller @Service @Repository @Component @ComponentScan 参考 spring ...