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] ...
随机推荐
- Win10《芒果TV》更新v3.8.30流星版:优化稳定性、升级无边框播放体验
随着暑假到来,大波王牌综艺和青春电视剧热浪来袭,Win10版<芒果TV>全平台同步更新流星版v3.8.30,进一步提升稳定性,巩固播放体验,升级剧场模式和画中画无边框体验,我们在芒果等你. ...
- SqlServer批量压缩数据库日志-多数据库批量作业,批量备份还原
原文:SqlServer批量压缩数据库日志-多数据库批量作业,批量备份还原 --作业定时压缩脚本 多库批量操作 DECLARE @DatabaseName NVARCHAR(50) DECLARE @ ...
- 改善C#程序的建议6:在线程同步中使用信号量
原文:改善C#程序的建议6:在线程同步中使用信号量 所谓线程同步,就是多个线程之间在某个对象上执行等待(也可理解为锁定该对象),直到该对象被解除锁定.C#中对象的类型分为引用类型和值类型.CLR在这两 ...
- VS2008下QT整合OGRE
环境配置如下:VS2008 QT版本:4.8.1 OGRE版本: 1.7.4 请先配置好QT for vs2008 : 下载QT VS2008的包,然后下个QT VS的插件 版本必须是VS2008 ...
- 在Qt工程中加Boost
摘要: Boost是一个很强大的C++库,堪比STL,里面有很多非常优秀的类库.我不多介绍,详情见官网:http://www.boost.org/ 要在我们的Qt工程中把这个库加进去应该怎么做呢?我今 ...
- Qt信号量QSemaphore(在线程里使用,结合生产者消费者的问题)
Qt中的信号量是由QSemaphore类提供的,信号量可以理解为对互斥量功能的扩展,互斥量只能锁定一次而信号量可以获取多次,它可以用来保护一定数量的同种资源.acquire()函数用于获取n个资源,当 ...
- spring cloud之eureka简介
最近线上的接口出了一些问题,有一些可能不是代码的问题,但是由于是测试和其他方面的同事爆出来的,所以感觉对接口的监控应该提上日程. 经过搜索发现,spring cloud的eureka就是专门做这方面工 ...
- python bmp image injection
1. 将原BMP文件的第三,第四字节替换为\x2F\x2A, 对应js中的注释符号/*BMP文件的第三.四.五.六字节表示BMP文件的大小2. 在BMP文件末尾添加(1)\xFF(2)\x2A\x2F ...
- 老雷socket编程之PHP利用socket扩展实现聊天服务
老雷socket编程之PHP利用socket扩展实现聊天服务 socket聊天服务原理 PHP有两个socket的扩展 sockets和streamssockets socket_create(AF_ ...
- iOS开发如何避免安全隐患
现在很多iOS的APP没有做任何的安全防范措施,导致存在很多安全隐患和事故,今天我们来聊聊iOS开发人员平时怎么做才更安全. 一.网络方面 用抓包工具可以抓取手机通信接口的数据.以Charles为例, ...