题目链接:Necklace

题意:

  给出一串珠子,每个珠子有它的value,现在给出n(n<=5e4)个珠子的value(1<=value<=1e6),现在给出m(1<=m<=2e5)个询问,每个询问给出l和r,要求[l,r]区间内所有珠子的value(如果有相同value值的珠子则只计算一次这个珠子的值)。

题解:

  刚开始看到这题,遇到区间求和就想到了树状数组。但是如何解决区间内相同value值只能计算一次的问题呢?看了题解后发现可以用离线化解决这个问题,我们可以先把所有的询问保存下来,将询问按右端点从小到大排序,然后将所有有重复的value值只保留最后一个位置的值,其他的value值全都减去。因为区间的右端点保证是从小到大的,而可以发现[l,r]这个区间的值就等于所有数保留最后一个出现的数的和(可以自己验证一下)。这里离散化最大的功能就是保证了我们的操作是从小到大的,这样我们前面的操作就不会影响后面的操作。还有这里是要用long long的不然会爆~@。@#

 #include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int MAX_N = 1e5+;
typedef pair<int,int> P;
P q[MAX_N*];
int q1[MAX_N*];
int vis[MAX_N*];
long long vec[MAX_N];
long long res[MAX_N];
long long out[MAX_N*];
void add(int x,long long num)
{
for(;x<MAX_N;x+=(x&-x))
res[x] += num;
}
long long sum(int x)
{
long long ans = ;
for(;x>;x-=(x&-x))
ans += res[x];
return ans;
}
int main()
{
int N,M,T;
cin>>T;
while(T--)
{
cin>>N;
memset(res,,sizeof(res));
memset(vis,,sizeof(vis));
for(int i=;i<=N;i++)
{
scanf("%lld",&vec[i]);
add(i,vec[i]);
if(!vis[vec[i]]) vis[vec[i]] = i;
}
cin>>M;
for(int i=;i<M;i++)
{
scanf("%d%d",&q1[i],&q[i].first);
q[i].second = i;
}
sort(q,q+M);
int right = ;
for(int i=;i<M;i++)
{
for(int j=right;j<=q[i].first;j++)
{
if(vis[vec[j]] != j)
{
add(vis[vec[j]],-vec[j]);
vis[vec[j]] = j;
}
}
right = q[i].first;
out[q[i].second] = sum(q[i].first) - sum(q1[q[i].second]-);
}
for(int i=;i<M;i++)
{
printf("%lld\n",out[i]);
}
}
return ;
}

HDU - 3874 Necklace (树状数组、离线处理)的更多相关文章

  1. HDU 3874 Necklace 树状数组

    题意:求区间内不同的数的和 离线处理,按查询右端点从小到大排序,从左往右扫一遍. 记录每个数出现的上一个位置,如果该数之前没有出现过,就加上,否则就在上一个位置减去. #include <cst ...

  2. hdu 3874(树状数组)题解

    Problem Description Mery has a beautiful necklace. The necklace is made up of N magic balls. Each ba ...

  3. Necklace HDU - 3874 (线段树/树状数组 + 离线处理)

    Necklace HDU - 3874  Mery has a beautiful necklace. The necklace is made up of N magic balls. Each b ...

  4. 2016 Multi-University Training Contest 5 1012 World is Exploding 树状数组+离线化

    http://acm.hdu.edu.cn/showproblem.php?pid=5792 1012 World is Exploding 题意:选四个数,满足a<b and A[a]< ...

  5. SPOJ DQUERY树状数组离线or主席树

    D-query Time Limit: 227MS   Memory Limit: 1572864KB   64bit IO Format: %lld & %llu Submit Status ...

  6. D-query SPOJ 树状数组+离线

    D-query SPOJ 树状数组+离线/莫队算法 题意 有一串正数,求一定区间中有多少个不同的数 解题思路--树状数组 说明一下,树状数组开始全部是零. 首先,我们存下所有需要查询的区间,然后根据右 ...

  7. HDU 3333 - Turing Tree (树状数组+离线处理+哈希+贪心)

    题意:给一个数组,每次查询输出区间内不重复数字的和. 这是3xian教主的题. 用前缀和的思想可以轻易求得区间的和,但是对于重复数字这点很难处理.在线很难下手,考虑离线处理. 将所有查询区间从右端点由 ...

  8. HDU 4417 - Super Mario ( 划分树+二分 / 树状数组+离线处理+离散化)

    题意:给一个数组,每次询问输出在区间[L,R]之间小于H的数字的个数. 此题可以使用划分树在线解决. 划分树可以快速查询区间第K小个数字.逆向思考,判断小于H的最大的一个数字是区间第几小数,即是答案. ...

  9. HDU 4630 No Pain No Game 树状数组+离线查询

    思路参考 这里. #include <cstdio> #include <cstring> #include <cstdlib> #include <algo ...

随机推荐

  1. Redis学习---Redis操作之List

    List操作,redis中的List在在内存中按照一个name对应一个List来存储 lpush(name,values) --> 实际上是左添加 # 在name对应的list中添加元素,每个新 ...

  2. win7下使用手动安装composer

    假设我们的php放置在D:\php 目录下, 1.添加环境变量,桌面--> 我的电脑右键---->属性 2.点击高级系统设置 3.点击环境变量 4.选择path,在变量值里面追加内容:  ...

  3. 多数据源报错 expected single matching bean but found 2: xxx,xxx

    问题: expected single matching bean but found 2: xxx,xxx 原因:在 Spring 容器中配置了两个类型Bean,Spring 容器将无法确定到底要用 ...

  4. 查找数据库表中重复的 Image 类型值

    直接上代码: SELECT * FROM [dbo].[V_Courseware] ))) IN ())) FROM [dbo].[V_Courseware] ))) ); 替换以上代码中相应对象即可 ...

  5. pathlib

    导入Path类 from pathlib import Path 创建Path对象 p = Path('C:\Windows\System32') # 用C:\Windows\System32创建Pa ...

  6. 解决osx下 ssh: connect to host localhost port 22: Connection refused

    解决办法: 终端下执行:sudo  systmesetup -setremotelogin on

  7. 韩天峰力荐 Swoole入门到实战打造高性能赛事直播平台

    第1章 课程介绍欢迎大家来到swoole的课程!本章主要是介绍了swoole的一些特性,以及使用场景,并且分享了swoole在其他公司的一些案例,最后重点讲解了swoole学习的一些准备工作.1-1 ...

  8. [连载]Tutorial series: learning how to write a 3D soft engine from scratch in C#, TypeScript or JavaScript[英]

    MSDN中的一篇博文链接:Tutorial series: learning how to write a 3D soft engine from scratch in C#, TypeScript ...

  9. nmap 扫描端口 + iftop 实时监控流量

    sleep 1|telnet 127.0.0.1 223 nmap 127.0.0.1 -p 223 -PN   (对禁ping IP) iftop -P -n -B -B 按字节显示 -N 切换 端 ...

  10. Ember.NativeArray-原生数组

    ember 2.18版本API翻译之Ember.NativeArray NativeArray mixin(混合类)包含使原生Array支持Ember.MutableArray 和其所有依赖API的属 ...