【JZOJ4804】【NOIP2016提高A组模拟9.28】成绩调研
题目描述
输入
输出
样例输入
5 3
1 2 3 1 2
1 2
1 1
1 1
样例输出
4
数据范围
解法
考虑设置左指针l和右指针r;
维护[l,r]的关于等第的桶。
初始l=r=0;
每次右移r,加入新元素a[r];
如果桶因此爆了上限,则右移l并剔除a[l]直至桶不再爆上线。
(“桶爆上限”定义:某一元素的计数超过给定的区间的右端点)
每次右移结束后,如果所有元素的计数位于各自给定区间之内;
则就称这个[l,r]可以对答案进行贡献;
贡献的方式:
假定[l,r]区间内可以对答案进行贡献,
简单想一个O(n)的贡献方法,一直把l向右移直至[l,r]不再可以对答案贡献为止。
考虑优化,显然容易确定对于每种等第最多向右移多少位以保证区间可以进行贡献,设为x[i]。
那么贡献就等于所有x[i]的最小值。
在右移的时候顺便用线段树维护这个x。
题解给出了一种O(n)的方法。
代码
#include<iostream>
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<algorithm>
#define ll long long
#define ln(x,y) ll(log(x)/log(y))
#define sqr(x) ((x)*(x))
using namespace std;
const char* fin="survey.in";
const char* fout="survey.out";
const ll inf=0x7fffffff;
const ll maxn=200007,maxt=maxn*4;/*注意!!!!!!!!*/
ll n,m,i,j,k,cnt,head,tmp;
ll ans;
ll a[maxn],tong[maxn],b[maxn][2];
ll c[maxt],fi[maxn],ta[maxn],ne[maxn],key[maxn];
bool bz=false;
void change(ll l,ll r,ll t,ll v,ll v1){
ll mid=(l+r)/2;
if (l==r) {
c[t]=v1;
return;
}
if (v<=mid) change(l,mid,t*2,v,v1);
else change(mid+1,r,t*2+1,v,v1);
c[t]=min(c[t*2],c[t*2+1]);
}
ll getmin(ll l,ll r,ll t,ll v1,ll v2){
ll mid=(l+r)/2;
if (l>v2 || r<v1) return inf;
if (l>=v1 && r<=v2) return c[t];
return min(getmin(l,mid,t*2,v1,v2),getmin(mid+1,r,t*2+1,v1,v2));
}
int main(){
freopen(fin,"r",stdin);
freopen(fout,"w",stdout);
scanf("%d%d",&n,&m);
memset(c,127,sizeof(c));
for (i=1;i<=n;i++) scanf("%d",&a[i]);
for (i=1;i<=m;i++) {
scanf("%d%d",&b[i][0],&b[i][1]);
if (b[i][0]==0) cnt++;
}
head=1;
for (i=1;i<=n;i++){
if (fi[a[i]]==0) fi[a[i]]=ta[a[i]]=i;
else ne[ta[a[i]]]=ta[a[i]]=i;
if (tong[a[i]]>=b[a[i]][0]){
tong[a[i]]++;
if (b[a[i]][0]==0) change(1,m,1,a[i],inf);
else {
key[a[i]]=ne[key[a[i]]],change(1,m,1,a[i],key[a[i]]);
}
while (tong[a[i]]>b[a[i]][1]){
bz=false;
if (tong[a[head]]>=b[a[head]][0]) bz=true;
tong[a[head]]--;
fi[a[head]]=ne[fi[a[head]]];
if (tong[a[head]]<b[a[head]][0] && bz) cnt--;
head++;
}
}else{
tong[a[i]]++;
if (tong[a[i]]==b[a[i]][0]){
cnt++;
key[a[i]]=fi[a[i]];
change(1,m,1,a[i],key[a[i]]);
}
}
if (cnt==m) {
ans+=getmin(1,m,1,1,m)-head+1;
}
}
printf("%lld",ans);
return 0;
}
启发
线性维护区间时,不妨考虑设置左右指针。
再联系数据结构来进行优化。
【JZOJ4804】【NOIP2016提高A组模拟9.28】成绩调研的更多相关文章
- 【JZOJ4803】【NOIP2016提高A组模拟9.28】求导
题目描述 输入 输出 样例输入 2x^2+3x+1 样例输出 4x+3 数据范围 样例解释 求导的意思: 多项式是由若干个单项式构成的 单项式的一般形式是ax^b,其中ab都是常数,x是自变量 对于单 ...
- NOIP2016提高A组模拟9.28总结
这次三道题都是可以AC的. 每道题思路都正确,但每道题都有细节没有注意. 第一题 1.没注意系数为1时可以省略系数: 2.没注意在第一项处理常数后,不能输出+号. 导致丢失20分:一定要多出特殊数据, ...
- 【JZOJ4805】【NOIP2016提高A组模拟9.28】跟踪
题目描述 输入 输出 样例输入 4 2 1 3 1 2 2 3 3 4 样例输出 2 数据范围 解法 预处理出两个陌生人走到各个点的距离. 从石神处开始dfs,判断走到每一个点是否会被抓: 如果会,则 ...
- JZOJ 4732. 【NOIP2016提高A组模拟8.23】函数
4732. [NOIP2016提高A组模拟8.23]函数 (Standard IO) Time Limits: 1500 ms Memory Limits: 262144 KB Detailed ...
- 【NOIP2016提高A组模拟9.14】数列编辑器
题目 分析 比赛上,没有注意到询问只询问光标前面,于是只打了个暴力. 因为询问只询问光标前面,首先,当光标向后每移动到一个位置,顺便将这个位置的前缀和,和最大前缀和求出来. 总之,模拟 #includ ...
- 【NOIP2016提高A组模拟9.24】总结
第一题纯模拟,结果那个出题人脑子似乎进水了,空间限制开了1G!!! 导致我捉摸了半天为什么空间要开那么大,最后只能得出上面的结论. 第二题是个矩阵快速幂,比赛上我没把递推式求出来,但是根据各种乱搞,得 ...
- 【JZOJ4746】【NOIP2016提高A组模拟9.3】树塔狂想曲
题目描述 相信大家都在长训班学过树塔问题,题目很简单求最大化一个三角形数塔从上往下走的路径和.走的规则是:(i,j)号点只能走向(i+1,j)或者(i+1,j+1).如下图是一个数塔,映射到该数塔上行 ...
- 【JZOJ4745】【NOIP2016提高A组模拟9.3】看电影
题目描述 听说NOIP2016大家都考得不错,于是CCF奖励省常中了 K 张变形金刚5的电影票奖励OI队的同学去看电影.可是省常中OI队的同学们共有 N(N >= K)人.于是机智的你想到了一个 ...
- 【JZOJ4787】【NOIP2016提高A组模拟9.17】数格子
题目描述 输入 输出 样例输入 1 10000 3 10000 5 10000 0 0 样例输出 1 11 95 数据范围 每个测试点数据组数不超过10组 解法 状态压缩动态规划. 设f[i][j]表 ...
随机推荐
- HZOI20190821模拟28题解
题面:https://www.cnblogs.com/Juve/articles/11390839.html 所有官方正解在我的文件里 A. 虎 算法1:我们发现非关键边与黑色边去掉以后,答案就是将所 ...
- opencv读取的彩色图像,数据是GBR而不是RGB
开发久了,容易想当然 直到数据怎么也不对的时候,才想起来查一下手册 三个像素,当然没有这么大的像素,这是放大之后的 数据输出
- 【DM642】H.264源代码在DM642上的移植
TI公司提供了用于C语言开发的CCS(Code Composer Studio),该平台包括了优化的ANSI编译器,使之可以使用C语言开发DSP程序.这种方法不仅使DSP开发的速度大大加快,而且DSP ...
- 【DM642学习笔记三】flash的烧写
ICETEK-DM642-PCI板上的29L008B芯片提供了8M位的Flash空间(访问地址空间是CE1,90000000h~90080000h).主要用于自启动功能和存储FPGA的配置数据. 一. ...
- mavenjar 一些拉取不下来问题
http://search.maven.org/这里找相近版本替换试试.拉取不下来是因为官方版本不足或者网络问题.
- Luogu P3459 [POI2007]MEG-Megalopolis(线段树)
P3459 [POI2007]MEG-Megalopolis 题意 题目描述 Byteotia has been eventually touched by globalisation, and so ...
- 有趣的纯CSS实现动态晴阴雨雪
我们先来看看实现的效果吧 非常的美腻,对吧.这个是纯css,且单标签实现的哦~ 先贴完整代码,我们再来看看这个里面究竟有什么可以借鉴的知识点 <!DOCTYPE html> <htm ...
- Thinkphp 错误集锦
1.无法加载控制器 开始还跑TP核心文件中找错误,结果没找到什么结果.最后还是用程序新建模块才发现问题. 问题是命名空间名字写错了.比如书:本来是Report模块下的IndexContrller,但是 ...
- web前端学习(四)JavaScript学习笔记部分(8)-- JavaScript瀑布流
index.html <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type&qu ...
- web服务器--nginx简介
nginx 介绍Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务.Nginx是一款轻量级的Web 服务器/反向代理服务器及电 ...