9.22考试 crf的数数 题解


这道题当时第一反应是线段树,但没有继续想,因为当时打完第一题打算这道题和第二道题并列做,打完第二道题状压后时间还有两个小时多,先打完暴力再说,打完之后又接着去想,然后想了5分多钟吧,扑街。
然后就发现这题似曾相识,有点像指针恒给我讲的分块“数颜色”,于是如获至宝的打了一个标准的分块。然后满心期待的以为至少能拿60分以上,结果被丝薄数据卡的一分没得,好无良的出题人啊。
考完试后发现好多人拿莫队打了70分,才反应过来这道题可以拿莫队打,然而之前只是听Q某犇讲过莫队的原理,具体实现也没打过,于是乎在自己的WW下打了一个J队……不得不说还挺像的……额挺像的……,然而我在宿舍里都排倒数,人家莫涛是国家队队长,差距啊……
其实正解不是莫队,莫队只是部分分,然而同桌Q某犇卡常数卡过去了,于是乎我也去打了莫队,然后各种恶意卡常,连计算机调内存,数组调用,O3等等等等我J某毕生所学都用上了,然而还是T成狗,不公平啊,我承认我没Q某犇帅,但脸黑到一定地步了啊!
于是乎,我只能乖乖的去打正解……
正解某种意义上挺有莫队的影子的,我们先把所有询问按照左右节点顺序排一遍序,然后从后向前进行查找,不断推进左节点位置(左节点一开始为n)然后维护一个t数组,代表该位置如果被选入会对当前答案做出如何的贡献,然后对于数x在该区间里从左到右出现的第x处利用差分的思想将该位置的t修改为1,对于出现的x+1处的t修改为-1,然后对于整个区间的贡献我们利用树状数组进行维护。然后直接对于该询问的右端点求前缀和即可。然而,我们应当注意几点,首先,我们在对树状数组进行修改时应当为修改值-t[当前针对的位置],然后就可以去掉之前改点对树状数组的影响,然后我们也应当记得把出现的x+2处的影响更新为0。
#pragma GCC optimze("O3")
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define N 1000005
#include<vector>
using namespace std;
int n,q,a[N],ans[N],t[N],b[N];
vector<int> p[N];
struct no
{
int l,r,bh;
}node[N];
inline bool px(no a,no b)
{
if(a.l==b.l)return a.r<b.r;
return a.l<b.l;
}
inline int read()
{
,f=;char x=getchar();
;x=getchar();}
)+(sum<<)+x-';x=getchar();}
return sum*f;
}
int lowbit(int x)
{
return x&(-x);
}
void add(int x,int z)
{
for(int i=x;i<=n;i+=lowbit(i))
b[i]+=z;
}
int get(int x)
{
;
;i-=lowbit(i))
ans+=b[i];
return ans;
}
int main()
{
scanf("%d%d",&n,&q);
;i<=n;i++)
a[i]=read();//scanf("%d",&a[i]);
;i<=q;i++)
{
node[i].bh=i;
node[i].l=read(),node[i].r=read(); //scanf("%d%d",&node[i].l,&node[i].r);
}
sort(node+,node++q,px);
int l=n;
;i--)
{
while(l>=node[i].l)
{
p[a[l]].push_back(l);
if(p[a[l]].size()>=a[l])
{
int to=p[a[l]].size()-a[l];
add(p[a[l]][to],-t[p[a[l]][to]]);t[p[a[l]][to]]=;
to--;
)
{
add(p[a[l]][to],--t[p[a[l]][to]]);t[p[a[l]][to]]=-;
)
{
add(p[a[l]][to-],-t[p[a[l]][to-]]);t[p[a[l]][to-]]=;
}
}
}
l--;
}
ans[node[i].bh]+=get(node[i].r);
}
;i<=q;i++)
printf("%d\n",ans[i]);
;
}
最后总结一下这次考试,160分,一个烂大街的大众分,30个人23个前十,十多个160。一开始还以为我翻盘了,然后呵呵,只能说如果当时想起来莫队就好了……
9.22考试 crf的数数 题解的更多相关文章
- 9.22考试 crf的军训 题解
做这道题时由于第一道题太水了,第一反应是NOIP T2级别的题,需要拿上70~100的分,然后就开始分析,当然最后事实证明我错了…… 这道题当时首先联想到了 NOIP2016愤怒的小鸟 当然,数据范围 ...
- 9.22考试 crf的视察 题解
这道题当时第一反应就是一道典型的NOIP第一题的难度,绝对要A掉,不然分数一定会被拉开. 然后就开始分析,暴力是一开始想的是用二维树状数组打加上暴力枚举长度,然而这道题满足二分性质,所以时间复杂度就是 ...
- C#版 - Leetcode 633. 平方数之和 - 题解
版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - L ...
- [CQOI2014]数三角形 题解(组合数学+容斥)
[CQOI2014]数三角形 题解(数论+容斥) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1328780 链接题目地址:洛谷P3166 BZOJ 350 ...
- 题解-[SDOI2014]数数
[SDOI2014]数数 这题的前置知识是AC自动机和dp,前置题目是 [JSOI2007]文本生成器,前置题目我写的题解 题解-[JSOI2007]文本生成器.我的讲解假设你做过上面那道题. 这题比 ...
- 8.22 NOIP模拟测试29(B) 爬山+学数数+七十和十七
T1 爬山 二分最高高度,$O(1)$判断是否可行. #include<iostream> #include<cstdio> #define ll long long usin ...
- 8.23考试总结(NOIP模拟46)[数数·数树·鼠树·ckw的树]
T1 数数 解题思路 大概是一个签到题的感觉...(但是 pyt 并没有签上) 第一题当然可以找规律,但是咱们还是老老实实搞正解吧... 先从小到大拍个序,这样可以保证 \(a_l<a_r\) ...
- 5.22考试总结(NOIP模拟1)
5.22考试总结(NOIP模拟1) 改题记录 T1 序列 题解 暴力思路很好想,分数也很好想\(QAQ\) (反正我只拿了5pts) 正解的话: 先用欧拉筛把1-n的素数筛出来 void get_Pr ...
- BZOJ3530: [Sdoi2014]数数
3530: [Sdoi2014]数数 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 322 Solved: 188[Submit][Status] ...
随机推荐
- WPF:通过BitmapSource的CopyPixels和Create方法来切割图片
原文 WPF:通过BitmapSource的CopyPixels和Create方法来切割图片 BitmapSource是WPF图像的最基本类型,它同时提供两个像素相关的方法就是CopyPixels和C ...
- 网络流量查看工具为 iftop
作者: daodaoliang 时间: 2016年5月23日 版本: v0.0.1 邮箱: daodaoliang@yeah.net 日常用的网络流量查看工具为 iftop, 但是他仅仅只能简单的查看 ...
- Android零基础入门第75节:Activity状态和生命周期方法
前面两期我们学习了Activity的创建和注册.以及启动和关闭,也学会了重写onCraete方法,这些知识在实际开发中远远不够,还需要学习了解更多. 生命周期就是一个对象从创建到销毁的过程,每一个对象 ...
- WPF与WinForm的抉择
微软曾经对WPF(代号Avalon)抱很大的期望——新一代的华丽用户界面平台,一统Web应用和桌面应用,Flash杀手,尽管微软口头上不承认.几年下来,WPF确实实现了当初的预期的大部分功能,但离称霸 ...
- 当程序调用dll时获取dll路径,DLL中获取自身的句柄
当程序调用dll时,获取dll路径的方法: HMODULE hMod = GetModuleHandle(_T("axload.dll")); if (hMod != NULL) ...
- java关键字-final
final特点: 1:这个关键字是一个修饰符,可以修饰类,方法,变量. 2:被final修饰的类是一个最终类,不可以被继承. 3:被final修饰的方法是一个最终方法,不可以被覆盖. 4:被final ...
- 【转】php7对redis的扩展及redis主从搭建
一:redis安装 1:下载并安装 cd /home/software wget http://download.redis.io/releases/redis-3.2.3.tar.gz ta ...
- Unity Shader常用函数,标签,指令,宏总结(持续更新)
极端常用: UnityObjectToClipPos(v.vertex); 最基本的顶点变换,模型空间 ==>裁剪空间 mul(unity_ObjectToWorld, v.vertex); 顶 ...
- 转载 make版MYsql 5.5.13
使用cmake安装mysql5.5.132014-04-09 12:59:42 分类: Mysql/postgreSQL 原文地址:使用cmake安装mysql5.5.13 作者:isqlw 安装cm ...
- 使用redis PSUBSCRIBE实现实时任务
PSUBSCRIBE可以监听键的过期事件 1.进行数据库的配置 notify-keyspace-events Ex 2.使用命令监听事件 psubscribe __keyevnet@0__:expi ...