在所有数字的统计范围,,对于重复统计只有一次

离线段树算法

排序终点坐标。然后再扫,反复交锋。把之前插入树行被删除

#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 离线段树的更多相关文章

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

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

  2. HDU - 3874 Necklace (线段树 + 离线处理)

    欢迎參加--每周六晚的BestCoder(有米! ) Necklace Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 65536/3 ...

  3. hdu 4031 attack 线段树区间更新

    Attack Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others)Total Subm ...

  4. hdu 4288 离线线段树+间隔求和

    Coder Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Su ...

  5. hdu 3016 dp+线段树

    Man Down Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total S ...

  6. HDU 3874 Necklace (树状数组 | 线段树 的离线处理)

    Necklace Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total S ...

  7. HDU 5877 dfs+ 线段树(或+树状树组)

    1.HDU 5877  Weak Pair 2.总结:有多种做法,这里写了dfs+线段树(或+树状树组),还可用主席树或平衡树,但还不会这两个 3.思路:利用dfs遍历子节点,同时对于每个子节点au, ...

  8. HDU 3308 LCIS (线段树区间合并)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3308 题目很好懂,就是单点更新,然后求区间的最长上升子序列. 线段树区间合并问题,注意合并的条件是a[ ...

  9. HDU 2795 Billboard (线段树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2795 题目大意:有一块h*w的矩形广告板,要往上面贴广告;   然后给n个1*wi的广告,要求把广告贴 ...

随机推荐

  1. mybatis 打印SQL语句

    在log4j文件中配置 log4j.rootLogger=DEBUG log4j.logger.com.ibatis=DEBUG log4j.logger.org.mybatis=DEBUG  

  2. python学习之print输出不换行

    print的即时打印会导致换行,要使得print的输出不换行,可以在字符串或者变量后面加个逗号(“,”),如下: s = "A bird in the hand..." for c ...

  3. POJ 36666 Making the Grade 简单DP

    题意是: 给出n个数,让你用最小的花费将其改成非递增或非递减的 然后花费就是新序列与原序列各个位置的数的差的绝对值的和 然后可以看到有2000个数,数的范围是10亿 仔细观察可以想象到.其实改变序列中 ...

  4. cocos2dx的发展的例子2048(加入动画版)

    网上找了很多写作教程2048.只是不知道卡的移动动画,我写了一个完美的动画版少. 开发步骤: 1,一个设计CardSprite类. 2,设计主游戏场景GameScene,实现游戏逻辑,加入动画逻辑. ...

  5. MFC漆摘要-截图,获得DIB/DDB图形Pixel

    1.       当前Screen进行Copy屏幕,获得BITMAP 当前屏幕Copy.须要获取当前屏幕的HDC, 一种是直接从屏幕DC抓原始图. 一种是然后使用兼容MemDC进行抓图,然后能够附加图 ...

  6. tb连续aaaaa123aaa自适应

    在连续的字符串数字中,td不会自适应大小,需要加上样式 style="word-break : break-all; overflow:hidden; " <table> ...

  7. 区间第K大

    protected static int partitions(List<KDNode> data,int left,int right,int k,int pos){ int l = l ...

  8. Nubia Z5S 官方4.4 201内測版 内核版本号信息

    从egl推断内核的的版本号: OpenGL ES Shader Compiler Version: E031.24.00.14 Build Date: 04/29/14 Tue Local Branc ...

  9. OllyDbg 使用注意事项 (十)

    OllyDbg 用笔记 (十) 參考 书:<加密与解密> 视频:小甲鱼 解密系列 视频 演示样例程序下载地址:http://pan.baidu.com/s/1kT1ce83 这个程序能够从 ...

  10. ** poj Y2K Accounting Bug 2586

    Y2K Accounting Bug Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10117   Accepted: 50 ...