Why Did the Cow Cross the Road III bzoj-4994 Usaco-2017 Feb

题目大意:给定长度为$2N$的序列,$1~N$各处现过$2$次,$i$第一次出现位置记为$a_i$,第二次记为$b_i$,求满足$a_i<a_j<b_i<b_j$的对数。

注释:$1\le n\le 10^5$。


想法:显然树状数组。

但是如何树状数组还是卡了我好半天。

不能像之前的题一样,一个数出现的第一个位置是正标记,第二个位置是负标记。

这次我们考虑第一次遇到这个数的时候打上正标记,第二次遇到这个数的时候把第一次遇到时打的正标记删除即可。

Code:

#include <bits/stdc++.h>
#define N 100010
using namespace std; typedef long long ll;
int tr[N<<2],vis[N],a[N<<1],n;
inline char nc() {static char *p1,*p2,buf[100000]; return (p1==p2)&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;}
int rd() {int x=0; char c=nc(); while(!isdigit(c)) c=nc(); while(isdigit(c)) x=(x<<3)+(x<<1)+(c^48),c=nc(); return x;}
inline int lowbit(int x) {return x&(-x);}
void update(int x,int val) {for(int i=x;i<=n;i+=lowbit(i)) tr[i]+=val;}
ll query(int x) {ll ans=0; for(int i=x;i;i-=lowbit(i)) ans+=tr[i]; return ans;}
int main()
{ll ans=0; n=rd()*2; for(int i=1;i<=n;i++) a[i]=rd(); for(int i=1;i<=n;i++)if(!vis[a[i]]) update(i,1),vis[a[i]]=i;else ans+=query(i)-query(vis[a[i]]),update(vis[a[i]],-1);cout << ans << endl ;return 0;
}

小结:树状数组的小应用。

转载于:https://www.cnblogs.com/ShuraK/p/10098087.html

[bzoj4994][Usaco2017 Feb]Why Did the Cow Cross the Road III_树状数组相关推荐

  1. 【bzoj4994】[Usaco2017 Feb]Why Did the Cow Cross the Road III 树状数组

    题目描述 给定长度为2N的序列,1~N各处现过2次,i第一次出现位置记为ai,第二次记为bi,求满足ai<aj<bi<bj的对数 样例输入 4 3 2 4 4 1 3 2 1 样例输 ...

  2. [BZOJ4994] [Usaco2017 Feb]Why Did the Cow Cross the Road III(树状数组)

    传送门 1.每个数的左右位置预处理出来,按照左端点排序,因为左端点是从小到大的,我们只需要知道每条线段包含了多少个前面线段的右端点即可,可以用树状数组 2.如果 ai < bj < bi, ...

  3. 【bzoj4992: [Usaco2017 Feb]Why Did the Cow Cross the Road】动规

    4992: [Usaco2017 Feb]Why Did the Cow Cross the Road Time Limit: 10 Sec   Memory Limit: 256 MB Submit ...

  4. bzoj 4997: [Usaco2017 Feb]Why Did the Cow Cross the Road III(Pu1 2018.10.1)

    算法:dfs,连通块 难度:NOIP 题解:搜索出每个连通块,找到每个连通块里有几头牛.然后每个连通块内牛数量相乘,求和即为正解 不清楚luogu题解中的代码明明MLE了,却还能AC??? 代码如下: ...

  5. BZOJ 4997 [Usaco2017 Feb]Why Did the Cow Cross the Road III

    本来想做一道搜索 最后发现是一道并查集的水题 如果两个邻格之间没有路 就把他们合并就行了 #include <cstdio> #include <cstring> #inclu ...

  6. BZOJ4997 [Usaco2017 Feb]Why Did the Cow Cross the Road III

    欢迎访问~原文出处--博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ4997 题意概括 在n*n的区域里,每一个1*1的块都是一个格子. 有k头牛在里面. 有r个篱笆把格 ...

  7. BZOJ 4992: [Usaco2017 Feb]Why Did the Cow Cross the Road

    题意很简单,不说了. 这题思路其实挺简单,把每个格编号为i,3*i走到3*j+1,3*i+1走到3*j+2,以此类推,注意一下边权是多少就好了. 然而一开始用分层图的普遍套路i+j*n*n编号调了好久 ...

  8. bzoj4997 [Usaco2017 Feb]Why Did the Cow Cross the Road III(bfs)

    枚举每一个起点,bfs能访问到几头牛即可.复杂度O(n3)O(n^3) #include <cstdio> #include <cstring> #include <al ...

  9. bzoj 4997: [Usaco2017 Feb]Why Did the Cow Cross the Road III

    题意: 给你一个n*n的地图 某对相邻的点中间有墙. 然后给你n个坐标,问你有多少对坐标不可以互相到达. 题解: 至今为止,提交记录就只有1个WA的-- 随便暴力做一下就好了.

最新文章

  1. openssl 64位编译_海思hi3516dv300开发--live555交叉编译
  2. js冒泡法和数组转换成字符串
  3. Hyper-V的管理与使用之一:添加功能
  4. jQuery 基础教程 (二)之jQuery对象与DOM对象
  5. Java笔记(四)各类容器,set,map,队列实现
  6. chrome 插件下载
  7. Android开发中的常用库
  8. 如何注册google账户呢?
  9. 如何在企业微信中使用微搭低代码
  10. 初学jQuery Easy UI的总结
  11. 题9.5:有10个学生,每个学生的数据包括学号、姓名、3门课程的成绩,从键盘输人10个 学生数据,要求输出3门课程总平均成绩,以及最高分的学生的数据(包括学号、姓 名、3门课程成绩、平均分数)。
  12. 夏季哪些蔬菜不适合生吃凉拌,食用会发生危险
  13. ROS(Robot Operating SysTerm) 系统
  14. YOLOv5初级问题与报错汇总
  15. Phong与Blinn-Phong
  16. 【转】初识caffe2
  17. 几款主流浏览器的简单比对实验,360极速最适合我
  18. 如何简单理解贝叶斯决策理论(Bayes Decision Theory)
  19. 软管金属穿线管蛇形管免焊接式M12航空插头螺丝压紧锁线
  20. NLP入门--Word2Vec(CBOW)实战

热门文章

  1. springboot导包显示不存在_(一)SpringBoot搭建基本后端应用
  2. sox处理mp3_SoX 音频处理工具使用方法
  3. go设置后端启动_为什么 Rubyists 应该考虑学习 Go
  4. 【Pytorch神经网络基础理论篇】 08 Softmax 回归 + 损失函数 + 图片分类数据集
  5. ERROR 2002 (HY000): Can‘t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock‘
  6. python工控怎么样_搞工控不了解python,好比雄鹰断了翅膀,理由在这里!
  7. Koa框架——coderhub实战
  8. python的GUI编程和tkinter学习笔记——第一个GUI程序
  9. LeetCode 986. 区间列表的交集
  10. 数据结构--链表--LRU缓存