hdu 3333 Turing Tree
给n个数, m个询问, 每次询问输出区间内的数的和, 相同的数只计算一次。
数组里的数是>-1e9 <1e9, 可以把它离散以后用莫队搞...
- #include <iostream>
- #include <vector>
- #include <cstdio>
- #include <cstring>
- #include <algorithm>
- #include <cmath>
- #include <map>
- #include <set>
- #include <string>
- #include <queue>
- #include <stack>
- #include <bitset>
- using namespace std;
- #define pb(x) push_back(x)
- #define ll long long
- #define mk(x, y) make_pair(x, y)
- #define lson l, m, rt<<1
- #define mem(a) memset(a, 0, sizeof(a))
- #define rson m+1, r, rt<<1|1
- #define mem1(a) memset(a, -1, sizeof(a))
- #define mem2(a) memset(a, 0x3f, sizeof(a))
- #define rep(i, n, a) for(int i = a; i<n; i++)
- #define fi first
- #define se second
- typedef pair<int, int> pll;
- const double PI = acos(-1.0);
- const double eps = 1e-;
- const int mod = 1e9+;
- const int inf = ;
- const int dir[][] = { {-, }, {, }, {, -}, {, } };
- const int maxn = 3e5+;
- int a[maxn], b[maxn], c[maxn];
- ll ans[];
- struct node
- {
- int l, r, id, block;
- bool operator < (node a)const
- {
- if(block == a.block)
- return r<a.r;
- return block<a.block;
- }
- }q[];
- int main()
- {
- int t, n, m;
- cin>>t;
- while(t--) {
- scanf("%d", &n);
- mem(c);
- for(int i = ; i<=n; i++) {
- scanf("%d", &a[i]);
- b[i-] = a[i];
- }
- sort(b, b+n);
- int cnt = unique(b, b+n)-b;
- for(int i = ; i<=n; i++) {
- a[i] = lower_bound(b, b+cnt, a[i])-b+;
- }
- int BLOCK = max(1.0, sqrt(cnt*1.0));
- cin>>m;
- for(int i = ; i<m; i++) {
- scanf("%d%d", &q[i].l, &q[i].r);
- q[i].block = q[i].l/BLOCK;
- q[i].id = i;
- }
- sort(q, q+m);
- ll sum = ;
- for(int i = q[].l; i<=q[].r; i++) {
- if(!c[a[i]]) {
- sum += b[a[i]-];
- }
- c[a[i]]++;
- }
- ans[q[].id] = sum;
- for(int i = ; i<m; i++) {
- if(q[i].l<q[i-].l) {
- for(int j = q[i-].l-; j>=q[i].l; j--) {
- if(!c[a[j]]) {
- sum += b[a[j]-];
- }
- c[a[j]]++;
- }
- } else {
- for(int j = q[i-].l; j<q[i].l; j++) {
- if(c[a[j]]==) {
- sum -= b[a[j]-];
- }
- c[a[j]]--;
- }
- }
- if(q[i].r>q[i-].r) {
- for(int j = q[i-].r+; j<=q[i].r; j++) {
- if(!c[a[j]]) {
- sum += b[a[j]-];
- }
- c[a[j]]++;
- }
- } else {
- for(int j = q[i-].r; j>q[i].r; j--) {
- if(c[a[j]] == ) {
- sum -= b[a[j]-];
- }
- c[a[j]]--;
- }
- }
- ans[q[i].id] = sum;
- }
- for(int i = ; i<m; i++)
- printf("%I64d\n", ans[i]);
- }
- return ;
- }
hdu 3333 Turing Tree的更多相关文章
- hdu 3333 Turing Tree 图灵树(线段树 + 二分离散)
http://acm.hdu.edu.cn/showproblem.php?pid=3333 Turing Tree Time Limit: 6000/3000 MS (Java/Others) ...
- HDU 3333 Turing Tree 线段树+离线处理
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3333 Turing Tree Time Limit: 6000/3000 MS (Java/Othe ...
- HDU 3333 Turing Tree(离线树状数组)
Turing Tree Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- HDU 3333 Turing Tree (线段树)
Turing Tree Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- HDU 3333 - Turing Tree (树状数组+离线处理+哈希+贪心)
题意:给一个数组,每次查询输出区间内不重复数字的和. 这是3xian教主的题. 用前缀和的思想可以轻易求得区间的和,但是对于重复数字这点很难处理.在线很难下手,考虑离线处理. 将所有查询区间从右端点由 ...
- HDU 3333 Turing Tree (树状数组)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3333 题意就是询问区间不同数字的和. 比较经典的树状数组应用. //#pragma comment(l ...
- hdu 3333 Turing Tree(线段树+离散化)
刚看到是3xian大牛的题就让我菊花一紧,觉着这题肯定各种高端大气上档次,结果果然没让我失望. 刚开始我以为是一个普通的线段树区间求和,然后啪啪啪代码敲完测试没通过,才注意到这个求和是要去掉相同的值的 ...
- 【树状数组+离线查询】HDU 3333 Turing Tree
https://www.bnuoj.com/v3/contest_show.php?cid=9149#problem/H [题意] 给定一个数组,查询任意区间内不同数字之和. (n<=30000 ...
- SPOJ D-query && HDU 3333 Turing Tree (线段树 && 区间不相同数个数or和 && 离线处理)
题意 : 给出一段n个数的序列,接下来给出m个询问,询问的内容SPOJ是(L, R)这个区间内不同的数的个数,HDU是不同数的和 分析 : 一个经典的问题,思路是将所有问询区间存起来,然后按右端点排序 ...
- HDU 3333 Turing Tree --树状数组+离线处理
题意:统计一段序列[L,R]的和,重复元素只算一次. 解法:容易看出在线做很难处理重复的情况,干脆全部讲查询读进来,然后将查询根据右端点排个序,然后离散化数据以后就可以操作了. 每次读入一个数,如果这 ...
随机推荐
- lodash中_.set的用法
_.set(object, path, value) # Ⓢ Ⓣ Ⓝ 设置对象的路径上的属性值.如果路径不存在,则创建它. 参数 1.object (Object): 待扩大的对象. 2.path ( ...
- Walking Ant(bfs)
Walking Ant Time Limit: 2 Seconds Memory Limit: 65536 KB Ants are quite diligent. They sometime ...
- android高仿微信拍照、多选、预览、删除(去除相片)相冊功能
先声明授人与鱼不如授人与渔,仅仅能提供一个思路,当然须要源代码的同学能够私下有偿问我要源代码:QQ:508181017 工作了将近三年时间了,一直没正儿八经的研究系统自带的相冊和拍照,这回来个高仿微信 ...
- Radio Link Failure and Recovery
四种会发生Radio Link Failure的场景 - DL Physical Layer Failure (PDCCH BLER > 10%) - Random Access Probl ...
- 小鱼提问1 类中嵌套public修饰的枚举,外部访问的时候却只能Class.Enum这样访问,这是为何?
/// <summary> /// 常量等定义 /// </summary> public class General { /// <summary> /// 文件 ...
- Bash shell使用环境的终端的环境设置:stty
Bash shell使用环境的终端的环境设置:stty Bash shell使用环境的终端的环境设置:stty stty -a 将当前所有的stty参数列出来 intr:给正在运行的程序发送中断信号 ...
- Archlinux在Btrfs分区上的安装(bios篇)
其实本文所有的内容在Archwiki上都可以找到,并且更新更全面(只是比较零散),我所做的只是对安装流程做一个小小的总结,每一步我都会稍微解释一下,但不会说的特别详细,毕竟这只是一篇安装引导文,而不是 ...
- poj 3487 稳定婚姻
/** 稳定婚姻:男生不停的求婚,女生不停地拒绝 **/ #include <iostream> #include <queue> #include <cstdio> ...
- MySQL float 与decimal 各中的区别。
想一个问题: 1/3+1/3+1/3=1.0 0.3+0.3+0.3 =0.9 想一想在小数的世界里要什么表示1/3呢!它的办法就是取一个与1/3十分接近的小数来代替:如上面例子中的0.3来代替1/3 ...
- SQL Server 数据岸问题
create table t2(x int constraint pk_t2 primary key);go insert into t2(x) values(1),(2),(3),(5),(7),( ...