[bzoj4994][Usaco2017 Feb]Why Did the Cow Cross the Road III_树状数组
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_树状数组相关推荐
- 【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 样例输 ...
- [BZOJ4994] [Usaco2017 Feb]Why Did the Cow Cross the Road III(树状数组)
传送门 1.每个数的左右位置预处理出来,按照左端点排序,因为左端点是从小到大的,我们只需要知道每条线段包含了多少个前面线段的右端点即可,可以用树状数组 2.如果 ai < bj < bi, ...
- 【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 ...
- bzoj 4997: [Usaco2017 Feb]Why Did the Cow Cross the Road III(Pu1 2018.10.1)
算法:dfs,连通块 难度:NOIP 题解:搜索出每个连通块,找到每个连通块里有几头牛.然后每个连通块内牛数量相乘,求和即为正解 不清楚luogu题解中的代码明明MLE了,却还能AC??? 代码如下: ...
- BZOJ 4997 [Usaco2017 Feb]Why Did the Cow Cross the Road III
本来想做一道搜索 最后发现是一道并查集的水题 如果两个邻格之间没有路 就把他们合并就行了 #include <cstdio> #include <cstring> #inclu ...
- BZOJ4997 [Usaco2017 Feb]Why Did the Cow Cross the Road III
欢迎访问~原文出处--博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ4997 题意概括 在n*n的区域里,每一个1*1的块都是一个格子. 有k头牛在里面. 有r个篱笆把格 ...
- 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编号调了好久 ...
- bzoj4997 [Usaco2017 Feb]Why Did the Cow Cross the Road III(bfs)
枚举每一个起点,bfs能访问到几头牛即可.复杂度O(n3)O(n^3) #include <cstdio> #include <cstring> #include <al ...
- bzoj 4997: [Usaco2017 Feb]Why Did the Cow Cross the Road III
题意: 给你一个n*n的地图 某对相邻的点中间有墙. 然后给你n个坐标,问你有多少对坐标不可以互相到达. 题解: 至今为止,提交记录就只有1个WA的-- 随便暴力做一下就好了.
最新文章
- openssl 64位编译_海思hi3516dv300开发--live555交叉编译
- js冒泡法和数组转换成字符串
- Hyper-V的管理与使用之一:添加功能
- jQuery 基础教程 (二)之jQuery对象与DOM对象
- Java笔记(四)各类容器,set,map,队列实现
- chrome 插件下载
- Android开发中的常用库
- 如何注册google账户呢?
- 如何在企业微信中使用微搭低代码
- 初学jQuery Easy UI的总结
- 题9.5:有10个学生,每个学生的数据包括学号、姓名、3门课程的成绩,从键盘输人10个 学生数据,要求输出3门课程总平均成绩,以及最高分的学生的数据(包括学号、姓 名、3门课程成绩、平均分数)。
- 夏季哪些蔬菜不适合生吃凉拌,食用会发生危险
- ROS(Robot Operating SysTerm) 系统
- YOLOv5初级问题与报错汇总
- Phong与Blinn-Phong
- 【转】初识caffe2
- 几款主流浏览器的简单比对实验,360极速最适合我
- 如何简单理解贝叶斯决策理论(Bayes Decision Theory)
- 软管金属穿线管蛇形管免焊接式M12航空插头螺丝压紧锁线
- NLP入门--Word2Vec(CBOW)实战
热门文章
- springboot导包显示不存在_(一)SpringBoot搭建基本后端应用
- sox处理mp3_SoX 音频处理工具使用方法
- go设置后端启动_为什么 Rubyists 应该考虑学习 Go
- 【Pytorch神经网络基础理论篇】 08 Softmax 回归 + 损失函数 + 图片分类数据集
- ERROR 2002 (HY000): Can‘t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock‘
- python工控怎么样_搞工控不了解python,好比雄鹰断了翅膀,理由在这里!
- Koa框架——coderhub实战
- python的GUI编程和tkinter学习笔记——第一个GUI程序
- LeetCode 986. 区间列表的交集
- 数据结构--链表--LRU缓存