HDU3333 Turing Tree 离线树状数组
题意:统计一段区间内不同的数的和
分析:排序查询区间,离线树状数组
- #include <cstdio>
- #include <cmath>
- #include <cstring>
- #include <algorithm>
- using namespace std;
- typedef long long LL;
- const int N = 3e4+;
- const int mod = 1e9+;
- LL c[N];
- int n,q,x,y,T,pre[N];
- struct Node{
- int v,id;
- }a[N];
- bool cmpv(Node a,Node b){
- if(a.v==b.v)return a.id<b.id;
- return a.v<b.v;
- }
- bool cmpid(Node a,Node b){
- return a.id<b.id;
- }
- void add(int x,LL t){
- for(int i=x;i<=n;i+=i&(-i))c[i]+=t;
- }
- LL ask(int x){
- LL ret=;
- for(int i=x;i;i-=i&(-i))ret+=c[i];
- return ret;
- }
- struct Que{
- int l,r,id;
- bool operator<(const Que &rhs)const{
- return r<rhs.r;
- }
- }p[];
- LL ret[];
- int main(){
- scanf("%d",&T);
- while(T--){
- scanf("%d",&n);
- for(int i=;i<=n;++i)scanf("%d",&a[i].v),a[i].id=i;
- sort(a+,a++n,cmpv);
- for(int i=;i<=n;++i){
- pre[a[i].id]=-;
- if(i!=&&a[i].v==a[i-].v)pre[a[i].id]=a[i-].id;
- }
- sort(a+,a++n,cmpid);
- memset(c,,sizeof(c));
- scanf("%d",&q);
- for(int i=;i<q;++i)scanf("%d%d",&p[i].l,&p[i].r),p[i].id=i;
- sort(p,p+q);
- for(int i=,cur=;i<q;++i){
- for(;cur<=p[i].r;++cur){
- if(pre[cur]!=-)add(pre[cur],-a[cur].v);
- add(cur,a[cur].v);
- }
- ret[p[i].id]=ask(p[i].r)-ask(p[i].l-);
- }
- for(int i=;i<q;++i)printf("%I64d\n",ret[i]);
- }
- return ;
- }
HDU3333 Turing Tree 离线树状数组的更多相关文章
- HDU 3333 Turing Tree(树状数组/主席树)
题意 给定一个长度为 \(n\) 的序列,\(m\) 个查询,每次查询区间 \([L,R]\) 范围内不同元素的和. \(1\leq T \leq 10\) \(1 \leq n\leq 300 ...
- Hdu-3333 Turning Tree (离线树状数组/线段树)
Hdu-3333 Turning Tree 题目大意:先给出n个数字.面对q个询问区间,输出这个区间不同数的和. 题解:这道题有多重解法.我另一篇博客写了分块的解法 HDU-3333 Turing ...
- 区间的关系的计数 HDU 4638 离线+树状数组
题目大意:给你n个人,每个人都有一个id,有m个询问,每次询问一个区间[l,r],问该区间内部有多少的id是连续的(单独的也算是一个) 思路:做了那么多离线+树状数组的题目,感觉这种东西就是一个模板了 ...
- HDU 4417 离线+树状数组
Super Mario Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- SPOJ 3267 D-query(离散化+在线主席树 | 离线树状数组)
DQUERY - D-query #sorting #tree English Vietnamese Given a sequence of n numbers a1, a2, ..., an and ...
- P1972 [SDOI2009]HH的项链[离线+树状数组/主席树/分块/模拟]
题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH 不断地收集新的贝壳,因此,他的项链 ...
- POJ 3416 Crossing --离线+树状数组
题意: 给一些平面上的点,然后给一些查询(x,y),即以(x,y)为原点建立坐标系,一个人拿走第I,III象限的点,另一个人拿II,IV象限的,点不会在任何一个查询的坐标轴上,问每次两人的点数差为多少 ...
- HDU 2852 KiKi's K-Number(离线+树状数组)
题目链接 省赛训练赛上一题,貌似不难啊.当初,没做出.离线+树状数组+二分. #include <cstdio> #include <cstring> #include < ...
- CF #365 (Div. 2) D - Mishka and Interesting sum 离线树状数组
题目链接:CF #365 (Div. 2) D - Mishka and Interesting sum 题意:给出n个数和m个询问,(1 ≤ n, m ≤ 1 000 000) ,问在每个区间里所有 ...
随机推荐
- 创建新进程,就三个函数CreateProcessAsUser CreateProcessWithLogonW CreateProcessWithTokenW(附网友的流程)
CreateProcessAsUser 怎么会还需要密码呢~~~ 先WTSGetActiveConsoleSessionId 得到当前的处理激活状态的SessionId OpenProcessToke ...
- 进入第一个Android应用界面
前话 距离上次学习Android已经过去了半年了,这半年我干嘛去了? 嘛相信大家也没兴趣了解,简单来说就是我学习了周边的知识技术,最后终于转回Android. 感觉开发一个Android需要很多知识吧 ...
- webapp 开发之iScroll 学习
demo.html <!doctype html> <html lang="en"> <head> <meta charset=" ...
- URAL 1066 Garland 二分
二分H2的位置,判断条件为是否有Hi < 0 #include <cstdio> #include <cstring> #include <cstdlib> ...
- 从SDE库文件手工删除SDE图层(转载)
转载自:http://gis-conquer.blog.sohu.com/164467560.html 一.前言 虽然Catalog能解决这种问题,但是在特殊情况下也许这种方法有点用途. ...
- java nio的基本原理
buffer<->channel->selector--handler... buffer与channel双通道传输数据,selector中可以有多个channel,这个样就可以多个 ...
- 笔记二、本地git命令
参考书籍: <Pro Git>中文版.pdf git init // 建立一个git仓库, 本地目录为工作目录, .git目录是中央数据目录 git ini ...
- 台湾P2P平台
2014年6月28日下午1:30,“2014两岸三地P2P网贷行业高峰论坛”在上海会展中心友谊会堂如期举行,现场高朋满座,来自全国各地的众多知名P2P网站平台的负责人参与了讨论,并就当前P2P行业的一 ...
- 创建xml时,设置xml编码问题
OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("GBK"); XMLW ...
- vijos 1379 字符串的展开
23333333333333333 #include<iostream> #include<cstdio> #include<cstring> #include&l ...