Frequent values

```#include <cstdio>
#include <algorithm>
using namespace std;

const int MAXN = ;

class SegNode {
public:
int L, R;
int l_value, r_value, value;
int is_same;
} node[ * MAXN];

int num[MAXN];

class SegTree {
public:
void log(int idx) {
printf("%d: ", idx);
for (int i = node[idx].L; i <= node[idx].R; i++)
printf("%d ", num[i]);
printf("(%d %d %d %d)\n", node[idx].l_value, node[idx].r_value, node[idx].value, node[idx].is_same);
}
void build(int root, int L, int R) {

node[root].L = L;
node[root].R = R;

if (L == R) {
// leaf
node[root].l_value = ;
node[root].r_value = ;
node[root].value = ;
node[root].is_same = ;
} else {
// non leaf
int M = (L + R) / ;
if (L <= M) {
build( * root, L, M);
}
if (M +  <= R) {
build( * root + , M + , R);
}
if (num[node[ * root].R] == num[node[ * root + ].L]) {
node[root].l_value = node[ * root].l_value + node[ * root].is_same * node[ * root + ].l_value;
node[root].r_value = node[ * root + ].r_value + node[ * root + ].is_same * node[ * root].r_value;
node[root].value = max(max(node[ * root].value, node[ * root + ].value), node[ * root].r_value + node[ * root + ].l_value);
node[root].is_same = node[ * root].is_same & node[ * root + ].is_same;
} else {
node[root].l_value = node[ * root].l_value;
node[root].r_value = node[ * root + ].r_value;
node[root].value = max(node[ * root].value, node[ * root + ].value);
node[root].is_same = ;
}
//log(root);
}
}
int query(int root, int L, int R, int k) {
if (L <= node[root].L && R >= node[root].R) {
if (k == ) return node[root].value;
else if (k == ) return node[root].l_value;
else return node[root].r_value;
}

if (L > node[root].R || R < node[root].L) {
return ;
}

int M = (node[root].L + node[root].R) / ;
if (R <= M) {
return query( * root, L, R, k);
} else if (L > M) {
return query( * root + , L, R, k);
} else {
if (num[node[ * root].R] == num[node[ * root + ].L]) {
if (k == ) {
int res = ;
res = max(query( * root, L, R, ), query( * root + , L, R, ));
res = max(res, query( * root, L, R, ) + query( * root + , L, R, ));
return res;
} else if (k == ) {
int res = query( * root, L, R, );
if (node[ * root].is_same) res += query( * root + , L, R, );
return res;
} else {
int res = query( * root + , L, R, );
if (node[ * root + ].is_same) res += query( * root, L, R, );
return res;
}
} else {
if (k == ) {
return max(query( * root, L, R, ), query( * root + , L, R, ));
} else if (k == ) {
return query( * root, L, R, );
} else {
return query( * root + , L, R, );
}
}
}
}
} tree;

int main() {
int n, q;
while (scanf("%d%d", &n, &q) && n) {
for (int i = ; i <= n; i++)
scanf("%d", &num[i]);
tree.build(, , n);
while (q--) {
int l, r;
scanf("%d%d", &l, &r);
printf("%d\n", tree.query(, l, r, ));
}
}
}```

Ping pong

```#include <cstdio>
#include <cstring>
using namespace std;

const int MAXA = ;
const int MAXN = ;

int c[MAXA];
int a[MAXN];
int left[MAXN], right[MAXN];

int lowbit(int x) {
return x & (-x);
}

void insert(int i, int x) {
while (i < MAXA) {
c[i] += x;
i += lowbit(i);
}
}

int query(int i) {
int res = ;
while (i > ) {
res += c[i];
i -= lowbit(i);
}
return res;
}

int main() {
int T;
scanf("%d", &T);
while (T--) {
int n;
scanf("%d", &n);
for (int i = ; i < n; i++)
scanf("%d", &a[i]);
memset(c, , sizeof(c));
for (int i = ; i < n; i++) {
left[i] = query(a[i]);
insert(a[i], );
}
memset(c, , sizeof(c));
for (int i = n - ; i >= ; i--) {
right[i] = query(a[i]);
insert(a[i], );
}
long long ans = ;
for (int i = ; i < n; i++) {
ans += (long long)left[i] * (n -  - i - right[i]);
ans += (i - left[i]) * (long long)right[i];
}
printf("%lld\n", ans);
}
}```

## Frequent values && Ping pong的更多相关文章

1. UVA - 11235 Frequent values

2007/2008 ACM International Collegiate Programming Contest University of Ulm Local Contest Problem F ...

2. HDU 2492 Ping pong (树状数组)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2492 Ping pong Problem Description N(3<=N<=2000 ...

3. UVALive 4329 Ping pong

Ping pong Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Fo ...

4. poj 3368 Frequent values(RMQ)

/************************************************************ 题目: Frequent values(poj 3368) 链接: http ...

5. POJ 3928 Ping pong（树状数组）

Ping pong Time Limit: 1000MS   ...

6. LA4329 Ping pong（树状数组与组合原理）

N (3N20000)ping pong players live along a west-east street(consider the street as a line segment). E ...

7. H - Frequent values

Problem F: Frequent values You are given a sequence of n integers a1 , a2 , ... , an in non-decreasi ...

8. Ping pong

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

9. POJ 3928 Ping pong

题目链接:http://poj.org/problem?id=3928 乒乓比赛,有N个人参加,输入每个玩家的技能等级,对每个人设置一个特定ID和一个技能值,一场比赛需要两个选手和一个裁判,只有当裁判 ...

## 随机推荐

1. iis6.0与asp.net的运行原理

这几天上网翻阅了不少前辈们的关于iis和asp.net运行原理的博客,学的有点零零散散,花了好长时间做了一个小结(虽然文字不多,但也花了不少时间呢),鄙人不才,难免有理解不道的地方,还望前辈们不吝赐教 ...

2. URAL 2068 Game of Nuts (博弈)

题意:给定 n 堆石子,每次一个人把它们分成三堆都是奇数的,谁先不能分,谁输. 析:因为每堆都是奇数,那么最后肯定都是要分成1的,那么就把不是1的全加和,然后判断奇偶就OK了. 代码如下: #prag ...

3. 【译文】NginScript – 为什么我们要实现自己的JS引擎？

在上周的nginx.conf 2015用户大会上,我们发布了全新的JavaScript引擎nginscript的预览版.历史上,JavaScript语言已经应用在许多方面,首先是作为客户端脚本,然后又 ...

4. 20169210《Linux内核原理与分析》第六周作业

这次博客分为两部分,第一部分是实验,第二部分是教材. 第一部分:实验 这周实验的内容是使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用,教学案例给的是time()获取系统时间的函数,我 ...

5. [MVC4-基礎] 使用DataAnnotations+jQuery進行表單驗證

我目前有以下表單,Select部分因為必須上一層有選擇下層才有資料,因此使用jQuery驗證問題類型是否有選擇就好,而問題描述要驗證是否為空,這裡採用MVC內建的DataAnnotations來驗證. ...

6. 十年linux命令总结

十年linux命令总结 本文链接: http://codingstandards.iteye.com/blog/786653 关于命令类型划分 本表中列出了我穷尽了我所有的记忆整理出来的Linux命令 ...

7. dubbo在企业中用得多吗？

看了阿里的dubbo,据说是一个不错的服务框架, 不过,好像Minglisoft.technology搞研发希望各位可以指点学习 想知道其他的公司用这个框架多吗?遇到的问题能否快速解决呢?抉择中...

8. chrome地址栏命令

Chrome作为一个前端开发的标准浏览器,用来体验和测试日新月异的新特性,自然是没话说. 有些新特性是需要特意开启设置的,有很多浏览器的内置功能也是要通过命令来开启或者使用的. Chrome 有很多的 ...

9. HBase的java客户端测试(二)---DML操作

测试准备 [首先同步时间:] for node in CloudDeskTop master01 master02 slave01 slave02 slave03;do ssh \$node " ...

10. 【C#复习总结】垃圾回收机制(GC)1

摘要:今天我们漫谈C#中的垃圾回收机制,本文将从垃圾回收机制的原理讲起,希望对大家有所帮助. GC的前世与今生 虽然本文是以.NET作为目标来讲述GC,但是GC的概念并非才诞生不久.早在1958年,由 ...