二次联通门 : Codeforces 221d D. Little Elephant and Array

/*
Codeforces 221d D. Little Elephant and Array 题意 : 询问一段区间中出现次数等于自身的数的个数 正解是dp 莫队水过, 作为我莫队的入门题
myj的思路 66 把所有需查询的区间排序 当前查询区间的答案为上一个区间的答案通过多次的区间移动得出 */
#include <algorithm>
#include <cstdio>
#include <cmath> #define Max 100005 void read (int &now)
{
now = ;
register char word = getchar ();
bool temp = false;
while (word < '' || word > '')
{
if (word == '-')
temp = true;
word = getchar ();
}
while (word >= '' && word <= '')
{
now = now * + word - '';
word = getchar ();
}
if (temp)
now = -now;
} int N, M; int belong[Max];
struct Data
{
int l, r; int ID; bool operator < (const Data &now) const
{
if (belong[now.l] == belong[this->l])
return now.r > this->r;
return belong[now.l] > belong[this->l];
}
}; int number[Max]; int K_Size;
int count[Max];
int rank_[Max]; Data query[Max];
int Answer[Max], Result;
int pos[Max]; incount void Updata (int now, int key)
{
if (count[number[now]] == pos[now])
Result--;
count[number[now]] += key;
if (count[number[now]] == pos[now])
Result++;
} int main (int argc, char *argv[])
{
read (N);
read (M);
K_Size = sqrt (N);
for (int i = ; i <= N; i++)
{
read (number[i]);
rank_[i] = number[i];
pos[i] = number[i];
belong[i] = (i + ) / K_Size;
}
std :: sort (rank_ + , rank_ + + N);
int Size = std :: unique (rank_ + , rank_ + + N) - rank_ - ;
for (int i = ; i <= N; i++)
number[i] = std :: lower_bound (rank_ + , rank_ + + Size, number[i]) - rank_;
for (int i = ; i <= M; i++)
{
read (query[i].l);
read (query[i].r);
query[i].ID = i;
}
std :: sort (query + , query + + M);
int l = , r = ;
for (int cur = , now_1, now_2; cur <= M; cur++)
{
now_1 = query[cur].l;
now_2 = query[cur].r;
if (l < now_1)
for (int i = l; i < now_1; i++)
Updata (i, -);
else
for (int i = l - ; i >= now_1; i--)
Updata (i, );
if (r < now_2)
for (int i = r + ; i <= now_2; i++)
Updata (i, );
else
for (int i = r; i > now_2; i--)
Updata (i, -);
l = now_1;
r = now_2;
Answer[query[cur].ID] = Result;
}
for (int i = ; i <= M; i++)
printf ("%d\n", Answer[i]);
return ;
}

最新文章

  1. long和BigDecimal引发的管理思考
  2. 点击按钮对两个div的隐藏与显示进行切换
  3. js对象的创建与原型总结
  4. Apache 配置多端口网站
  5. [Architecture Design] 3-Layer基础架构
  6. Jenkins-CVE-2016-0792漏洞利用及修复建议
  7. Ubuntu kylin系统改中文系统文件名为英文
  8. NFS错误Starting NFS quotas: Cannot register service: RPC: Unable to receive; errno=Connection refused
  9. 【转】suid sgid 详解
  10. OC1_类与对象
  11. 五分钟学习React(三):纯HTML代码搭建React应用
  12. Hibernate学习笔记一 使用idea开发工具搭建框架
  13. laravel 5.5 安装
  14. 苹果8plus怎么录屏视频
  15. Swagger2常用注解及其说明 (转)
  16. (五)JMM的介绍
  17. 10款jQuery图片左右滚动插件
  18. SEO优化上首页之搜索引擎原理简要
  19. JS中eval函数的使用
  20. 怎样使用CSS3实现书页(书本)卷角效果

热门文章

  1. my linux cmd
  2. C++ 异步编程:Boost.Asio
  3. P1777 帮助_NOI导刊2010提高(03)
  4. intellij idea 中右键项目没有git
  5. 【转载】使用Jedis操作redis
  6. MySQL绿色版mysql-5.7.17-winx64简洁安装教程
  7. Springboot笔记01——Springboot简介
  8. log4j托管tomcat日志
  9. Java中关于String类型的一些思考
  10. Python Multiprocessing 多进程,使用多核CPU计算 并使用tqdm显示进度条