题目链接:http://codeforces.com/contest/459/problem/D

题意:给出数组a,定义f(l,r,x)为a[]的下标l到r之间,等于x的元素数。i和j符合f(1,i,a[i])>f(j,n,a[j]),而且要求i<j,求i和j的种类数。

题解:先预处理一下设map be[a[i]]表示f(1,i,a[i])的值,然后在倒着来设af[a[j]]表示f(j,n,a[j])的值。

然后再用线段树更新一下长度为af[a[j]]的值然后再在树上查询小于be[a[j-1]]长度的一共有多少就行。

#include <iostream>
#include <cstring>
#include <map>
#include <cstdio>
using namespace std;
const int M = 1e6 + 10;
map<int , int>be , af;
int a[M];
struct TnT {
int l , r , sum;
}T[M << 2];
void pushup(int i) {
T[i].sum = T[i << 1].sum + T[(i << 1) | 1].sum;
}
void build(int l , int r , int i) {
int mid = (l + r) >> 1;
T[i].l = l , T[i].r = r , T[i].sum = 0;
if(l == r) return ;
build(l , mid , i << 1);
build(mid + 1 , r , (i << 1) | 1);
pushup(i);
}
void updata(int pos , int i) {
int mid = (T[i].l + T[i].r) >> 1;
if(T[i].l == T[i].r && T[i].l == pos) {
T[i].sum++;
return ;
}
if(mid < pos) {
updata(pos , (i << 1) | 1);
}
else {
updata(pos , i << 1);
}
pushup(i);
}
int query(int l , int r , int i) {
int mid = (T[i].l + T[i].r) >> 1;
if(T[i].l == l && T[i].r == r) {
return T[i].sum;
}
pushup(i);
if(mid < l) {
return query(l , r , (i << 1) | 1);
}
else if(mid >= r) {
return query(l , r , i << 1);
}
else {
return query(l , mid , i << 1) + query(mid + 1 , r , (i << 1) | 1);
}
}
int main() {
int n;
scanf("%d" , &n);
be.clear() , af.clear();
for(int i = 1 ; i <= n ; i++) {
scanf("%d" , &a[i]);
be[a[i]]++;
}
build(1 , n , 1);
long long ans = 0;
be[a[n]]--;
for(int i = n - 1 ; i >= 1 ; i--) {
af[a[i + 1]]++;
updata(af[a[i + 1]] , 1);
if(be[a[i]] > 1)
ans += (long long)query(1 , be[a[i]] - 1 , 1);
be[a[i]]--;
}
printf("%I64d\n" , ans);
return 0;
}

最新文章

  1. 汗,Google又调整了编译工具(升级SDK先备份!!!)
  2. 优先级反转实验,使用信号量实现【RT-Thread学习笔记 5】
  3. android 设置布局为无标题样式
  4. tomcat配置虚拟目录映射
  5. django概述
  6. BZOJ 1831 逆序对
  7. 一个CSS小测试
  8. Rock the Tech Interview
  9. openstack私有云布署实践【19 通过python客户端 创建实例VM指定IP地址】
  10. Spring Boot 学习(2)
  11. java学习之路--简单基础的面试题
  12. BOF、EOF 属性
  13. Servlet路径跳转问题
  14. 【ES】简单使用
  15. 操作系统-容器-Docker:如何将应用打包成为 Docker 镜像?
  16. MySQL数据库储存引擎Inoodb一--记录储存结构
  17. Windows Azure上的大数据服务: HDInsight的介绍
  18. 【笔试题】怎样将 GB2312 编码的字符串转换为 ISO-8859-1 编码的字符串?
  19. shell 脚本的坑
  20. Java和JDK版本的关系

热门文章

  1. 泥瓦匠 5 年 Java 的成长感悟(下)
  2. windows server 2008 R2中建立ftp站点
  3. 【React踩坑记一】React项目中禁用浏览器双击选中文字的功能
  4. OSGi Bundle之Hello World
  5. python基础--列表,元组
  6. bytedance专题
  7. Golang 解决 Iris 被墙的依赖包
  8. 分布式任务队列--Celery的学习笔记
  9. Java 实现MD5加密
  10. Mbatis是什么?怎么运行?