【SPOJ DQUERY】区间数字统计
【链接】 我是链接,点我呀:)
【题意】
题意
【题解】
因为区间的端点移动一个单位的话,只会涉及到一个元素的增多或减少。
因此可以用莫队算法来解决。
只需要开一个数组(大小1百万),用下标来快速检索元素的个数即可。
【代码】
#include <bits/stdc++.h>
#define ll long long
using namespace std;
struct abc{
int l,r,id;
};
const int N = 30000;
const int Q = 200000;
int cnt[1000000+10];
abc query[Q+10];
int n,q,a[N+10];
int ans[Q+10],cur = 0;
bool cmp(abc a,abc b){
if (a.l/200==b.l/200){
return a.r<b.r;
}else{
return a.l<b.l;
}
}
int main(){
//freopen("D:\\rush.txt","r",stdin);
ios::sync_with_stdio(0),cin.tie(0);
cin >> n;
for (int i = 1;i <= n;i++) cin >> a[i];
cin >> q;
for (int i = 1;i <= q;i++){
int l,r;
cin >> l >> r;
query[i].l = l;query[i].r = r;query[i].id = i;
}
sort(query+1,query+1+q,cmp);
int nowl = query[1].l,nowr = query[1].r;
for (int i = nowl;i<=nowr;i++){
cnt[a[i]]++;
if (cnt[a[i]]==1){
cur++;
}
}
for (int i = 1;i <= Q;i++){
while (nowl<query[i].l){
cnt[a[nowl]]--;
if (cnt[a[nowl]]==0) cur--;
nowl++;
}
while (nowl>query[i].l){
nowl--;
cnt[a[nowl]]++;
if (cnt[a[nowl]]==1) cur++;
}
while (nowr<query[i].r){
nowr++;
cnt[a[nowr]]++;
if (cnt[a[nowr]]==1) cur++;
}
while(nowr>query[i].r){
cnt[a[nowr]]--;
if (cnt[a[nowr]]==0) cur--;
nowr--;
}
ans[query[i].id] = cur;
}
for (int i = 1;i <= q;i++){
cout<<ans[i]<<endl;
}
return 0;
}
【SPOJ DQUERY】区间数字统计的更多相关文章
- SPOJ - DQUERY(区间不同数+树状数组)
链接:SPOJ - DQUERY 题意:求给定区间不同数的个数(不更新). 题解:离线+树状数组. 对所求的所有区间(l, r)根据r从小到大排序.从1-n依次遍历序列数组,在树状数组中不断更新a[i ...
- SPOJ DQUERY D-query (在线主席树/ 离线树状数组)
版权声明:本文为博主原创文章,未经博主允许不得转载. SPOJ DQUERY 题意: 给出一串数,询问[L,R]区间中有多少个不同的数 . 解法: 关键是查询到某个右端点时,使其左边出现过的数都记录在 ...
- [主席树]SPOJ DQUERY
题目链接 题意:n个数 m个查询 查询的是[l, r]区间内不相同的数的个数 没有修改,因此静态的主席树就好了 将重复的元素建树即可 query的时候加起来,用区间长度(r-l+1)去减就是答案 (q ...
- SPOJ DQUERY树状数组离线or主席树
D-query Time Limit: 227MS Memory Limit: 1572864KB 64bit IO Format: %lld & %llu Submit Status ...
- 数字统计(NOIP2010)
题目链接:数字统计 这题很水. 思路就是:枚举每一个区间内的数,然后对于每一个数,每个位去判断是否为2,就行了. 下面上代码: #include<bits/stdc++.h> using ...
- 数字统计类题目的非数位DP解法
ZJOI2010 数字统计 上题题意为求[l,r]区间中每个数字(0~9)出现的次数 一般的做法为将区间当成[0,r]-[0,l-1],然后进行数位DP 但事实上将区间当成[0,r]-[0,l-1]后 ...
- AC日记——数字统计 openjudge 1.5 41
41:数字统计 总时间限制: 1000ms 内存限制: 65536kB 描述 请统计某个给定范围[L, R]的所有整数中,数字2出现的次数. 比如给定范围[2, 22],数字2在数2中出现了1次, ...
- zznu 1255 数字统计(数位DP, 数学方法)
最近在学数位DP, 感觉还是满有收获的! 做了几个题之后想起来自己OJ上曾经做的一道题,以前是用数学方法写的,现在改用数位DP来写了一遍. 题目: 1255: 数字统计 时间限制: 1 Sec 内存 ...
- Vijos P1784 数字统计【模拟】
数字统计 背景 来自 NOIP2010 普及组 第一题 描述 请统计某个给定范围[L, R]的所有整数中,数字2出现的次数. 比如在给定范围[2, 22],数字2在数2中出现了1次,在数12中出现了1 ...
随机推荐
- 转帖 maven(一) maven到底是个啥玩意~
转载自:https://www.cnblogs.com/whgk/p/7112560.html 我记得在搞懂maven之前看了几次重复的maven的教学视频.不知道是自己悟性太低还是怎么滴,就是搞不清 ...
- Tomcat 配置访问限制:访问白名单和访问黑名单
最近公司的阿里云服务器上配置的 Tomcat 服务器运行 java的环境,但是通过观察 Tomcat 这几天的日志发现,有很多莫名其妙的 IP 访问主机下莫名其妙的地址,如:/80./testprox ...
- loj2064[HAOI2016]找相同字符
题意:给你两个字符串,问其中各取一个子串,有多少对相同?n<=20W. 标程: #include<bits/stdc++.h> using namespace std; typede ...
- Dart编程实例 - 类型测试操作符 is!
Dart编程实例 - 类型测试操作符 is! void main() { double n = 2.20; var num = n is! int; print(num); } 本文转自:http:/ ...
- Yii2中一些常用的参数
系统类型: <?= php_uname() ?> 解译引擎: <?= $_SERVER['SERVER_SOFTWARE'] ?>, Zend: <?= Zend_Ver ...
- thinkphp IP获取和定位
系统内置了get_client_ip方法用于获取客户端的IP地址,使用示例: $ip = get_client_ip(); 如果要支持IP定位功能,需要使用扩展类库Org\Net\IpLocation ...
- Shiro学习(4)INI配置
之前章节我们已经接触过一些INI配置规则了,如果大家使用过如spring之类的IoC/DI容器的话,Shiro提供的INI配置也是非常类似的,即可以理解为是一个IoC/DI容器,但是区别在于它从一个根 ...
- (转)OpenFire源码学习之五:用户登录
转:http://blog.csdn.net/huwenfeng_2011/article/details/43413377 登陆 登陆认证,客户端发送认SASL证消息: <auth mecha ...
- mongodb update操作
//修改字段名称,把synonymsList表的name_status修改为status db.getCollection('synonymsList').update({}, {$rename : ...
- 戏说 .NET GDI+系列学习教程(二、Graphics类的方法)
一.DrawBezier 画立体的贝尔塞曲线 private void frmGraphics_Paint(object sender, PaintEventArgs e) { Graphics g ...