HDU 3874 离线段树
在所有数字的统计范围,,对于重复统计只有一次
离线段树算法
排序终点坐标。然后再扫,反复交锋。把之前插入树行被删除
#include "stdio.h"
#include "string.h"
#include "algorithm"
using namespace std; struct node
{
int l,r;
__int64 sum;
}data[200010]; struct Mark
{
int l,r,id;
}mark[200010]; int hash[1000001];
__int64 a[50010],ans[200010];
bool cmp(Mark a,Mark b)
{
return a.r<b.r;
} void build (int l,int r,int k)
{
int mid;
data[k].l=l;
data[k].r=r;
data[k].sum=0; if (l==r) return ;
mid=(l+r)/2; build(l,mid,k*2);
build(mid+1,r,k*2+1);
} void updata(int n,int k,int op)
{
int mid;
if (data[k].l==n && data[k].r==n)
{
data[k].sum+=op;
return ;
} mid=(data[k].l+data[k].r)/2;
if (n<=mid) updata(n,k*2,op);
else updata(n,k*2+1,op); data[k].sum=data[k*2].sum+data[k*2+1].sum;
} __int64 query(int l,int r,int k)
{
int mid;
if (data[k].l==l && data[k].r==r)
return data[k].sum;
mid=(data[k].l+data[k].r)/2; if (r<=mid) return query(l,r,k*2);
else
if (l>mid) return query(l,r,k*2+1);
else
return query(l,mid,k*2)+query(mid+1,r,k*2+1);
} int main()
{
int Case,i,n,m,now; scanf("%d",&Case);
while (Case--)
{
scanf("%d",&n);
for (i=1;i<=n;i++)
scanf("%I64d",&a[i]);
scanf("%d",&m);
for (i=0;i<m;i++)
{
scanf("%d%d",&mark[i].l,&mark[i].r);
mark[i].id=i;
}
sort(mark,mark+m,cmp); build(1,50000,1);
memset(hash,0,sizeof(hash));
now=1;
for (i=0;i<m;i++)
{
while (now<=mark[i].r)
{
if (hash[a[now]]!=0)
updata(hash[a[now]],1,-a[now]);
hash[a[now]]=now;
updata(now,1,a[now]);
now++;
}
ans[mark[i].id]=query(mark[i].l,mark[i].r,1);
}
for (i=0;i<m;i++)
printf("%I64d\n",ans[i]);
}
return 0;
}
版权声明:本文博主原创文章。博客,未经同意不得转载。
HDU 3874 离线段树的更多相关文章
- Necklace HDU - 3874 (线段树/树状数组 + 离线处理)
Necklace HDU - 3874 Mery has a beautiful necklace. The necklace is made up of N magic balls. Each b ...
- HDU - 3874 Necklace (线段树 + 离线处理)
欢迎參加--每周六晚的BestCoder(有米! ) Necklace Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 65536/3 ...
- hdu 4031 attack 线段树区间更新
Attack Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Others)Total Subm ...
- hdu 4288 离线线段树+间隔求和
Coder Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Su ...
- hdu 3016 dp+线段树
Man Down Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...
- HDU 3874 Necklace (树状数组 | 线段树 的离线处理)
Necklace Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total S ...
- HDU 5877 dfs+ 线段树(或+树状树组)
1.HDU 5877 Weak Pair 2.总结:有多种做法,这里写了dfs+线段树(或+树状树组),还可用主席树或平衡树,但还不会这两个 3.思路:利用dfs遍历子节点,同时对于每个子节点au, ...
- HDU 3308 LCIS (线段树区间合并)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3308 题目很好懂,就是单点更新,然后求区间的最长上升子序列. 线段树区间合并问题,注意合并的条件是a[ ...
- HDU 2795 Billboard (线段树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2795 题目大意:有一块h*w的矩形广告板,要往上面贴广告; 然后给n个1*wi的广告,要求把广告贴 ...
随机推荐
- WPF界面设计技巧(6)—玩玩数字墨水手绘涂鸦
原文:WPF界面设计技巧(6)-玩玩数字墨水手绘涂鸦 想让你的程序支持鼠标及手写笔涂鸦吗?只要敲入“<InkCanvas/>”这几个字符,你就会领悟什么叫“很好很强大”,今天我们来做一个手 ...
- UIView详解2
第三.Configuring the Event-Related Behavior 1. userInteractionEnabled property A Boolean value that ...
- Unity3D入门(二):碰撞检測
碰撞器由来 1.系统默认会给每一个对象(GameObject)加入一个碰撞组件(ColliderComponent),一些背景对象则能够取消该组件. 2.在unity3d中,能检測碰撞发生的方式有两种 ...
- 外网SSH访问内网LINUX的N种方法
外网SSH访问内网LINUX的N种方法 http://www.nat123.com/Pages_8_260.jsp 一,动态公网IP环境 1,环境描述: 路由器分配的是动态公网IP,且有路由管理权限, ...
- iOS随机颜色
#import <UIKit/UIKit.h> @interface UIColor (RandomColor) +(UIColor *) randomColor; @end #impor ...
- 状态压缩dp入门
poj1321 http://poj.org/problem?id=1321 我们可以把棋盘的每一行看做是一个状态,如果某一列放置了棋子,那么就标记为1,否则就标记为0.然后把它看成是一个二进制数,然 ...
- Unity--关于优化方面的那些事儿(一)
近期做一个小项目,要求包的大小不能超过30M. 晚上做了个小实验,方法的确非常本,只是曾经非常多没懂的地方如今清晰了很多,我是菜鸟!希望本文章对大家有帮助,谢谢! 实验结果: 实验结果: 1.场景中仅 ...
- Eclipse+Maven创建webapp项目<二> (转)
Eclipse+Maven创建webapp项目<二> 1.开启eclipse,右键new——>other,如下图找到maven project 2.选择maven project,显 ...
- 【原创】leetCodeOj --- Sort List 解题报告
今日leetcode链表题全制霸 原题地址: https://oj.leetcode.com/problems/sort-list/ 题目内容: Sort List Sort a linked lis ...
- HDU 4828 (卡特兰数+逆)
HDU 4828 Grids 思路:能够转化为卡特兰数,先把前n个人标为0.后n个人标为1.然后去全排列,全排列的数列.假设每一个1的前面相应的0大于等于1,那么就是满足的序列,假设把0看成入栈,1看 ...