51NOD 1962 区间计数 单调栈+二分 / 线段树+扫描线
两个数列 {An} , {Bn}
,请求出Ans, Ans定义如下:
Ans:=Σni=1Σnj=i[max{Ai,Ai+1,...,Aj}=max{Bi,Bi+1,...,Bj}]
注:[ ]内表达式为真,则为1,否则为0.
- 第一行一个整数N
- 第二行N个整数Ai
- 第三行N个整数Bi
- 一行,一个整数Ans
- 5
- 1 4 2 3 4
- 3 2 2 4 1
- #include <bits/stdc++.h>
- inline long long read(){long long x=,f=;char ch=getchar();while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}return x*f;}
- using namespace std;
- #define ls i<<1
- #define rs ls | 1
- #define mid ((ll+rr)>>1)
- #define MP make_pair
- typedef long long LL;
- typedef unsigned long long ULL;
- const long long INF = 1e18+1LL;
- const double pi = acos(-1.0);
- const int N = 4e5 + , M = 1e3, inf = 2e9;
- int n,a[N],b[N];
- int l[],r[],q[][N],pos[][N];
- LL cal(int x,int p,int i) {
- int ll = l[p], rr = r[p],ok = ll;
- while(ll <= rr) {
- if(q[p][mid] > x) {
- ll = mid + ;
- } else ok = mid,rr = mid - ;
- }
- // cout<<i<<" "<<p<<" "<<ok<<" "<<q[p][ok]<<" "<<x<<endl;
- int mmp1,mmp2;
- mmp1 = max(pos[p][ok-]+,pos[p^][r[p^]-]+);
- mmp2 = i-;
- if(q[p][ok] == x)
- return 1LL * max(min(pos[p^][r[p^]],pos[p][ok]) - mmp1+,)
- * max(mmp2 - max(pos[p^][r[p^]],pos[p][ok]) + ,);
- else return ;
- }
- int main() {
- cin >> n;
- for(int i = ; i <= n; ++i) scanf("%d",&a[i]);
- for(int i = ; i <= n; ++i) scanf("%d",&b[i]);
- l[] = l[] = ;
- r[] = r[] = ;
- pos[][] = pos[][] = ;
- LL ans = ;
- for(int i = ; i <= n; ++i) {
- LL ret = ;
- while(l[] <= r[] && a[i] >= q[][r[]]) {
- ret += cal(q[][r[]],,i);
- r[]--;
- }
- q[][++r[]] = a[i];pos[][r[]] = i;
- while(l[] <= r[] && b[i] >= q[][r[]]) {
- ret += cal(q[][r[]],,i);
- r[]--;
- }
- q[][++r[]] = b[i];pos[][r[]] = i;
- //cout<<"fuck "<<i<<" " << ret<<endl;
- ans += ret;
- }
- while(l[] <= r[]) {
- ans += cal(q[][r[]],,n+);
- r[]--;
- }
- cout<<ans<<endl;
- return ;
- }
51NOD 1962 区间计数 单调栈+二分 / 线段树+扫描线的更多相关文章
- 51nod 1962区间计数(单调栈加二分)
题目要求是求出两个序列中处于相同位置区间并且最大值相同的区间个数,我们最直观的感受就是求出每个区间的最大值,这个可以O(N)的求,利用单调栈求出每个数作为最大值能够覆盖的区间. 然后我们可以在进行单调 ...
- 51nod 1206 Picture 矩形周长求并 | 线段树 扫描线
51nod 1206 Picture 矩形周长求并 | 线段树 扫描线 #include <cstdio> #include <cmath> #include <cstr ...
- 有趣的线段树模板合集(线段树,最短/长路,单调栈,线段树合并,线段树分裂,树上差分,Tarjan-LCA,势能线段树,李超线段树)
线段树分裂 以某个键值为中点将线段树分裂成左右两部分,应该类似Treap的分裂吧(我菜不会Treap).一般应用于区间排序. 方法很简单,就是把分裂之后的两棵树的重复的\(\log\)个节点新建出来, ...
- 【10.7校内测试】【队列滑窗】【2-sat】【贪心+栈二分+线段树(noip模拟好题)】【生日祭!】
比较好想的一道题,直接用队列滑窗,因为扫一遍往队列里加东西时,改变的只有一个值,开桶储存好就行了! #include<bits/stdc++.h> using namespace std; ...
- 51Nod—1174 区间中最大的数 线段树模版
在大佬们题解的帮助下算是看懂了线段树吧...在这mark下防一手转头就忘. #include<iostream> #include<stdio.h> using namespa ...
- 51nod 1962 区间计数(单调栈+二分)
维护两个单调递减的栈,当i加进栈,位置x的数弹出的时候,在另一个栈中找到和这个数一样大的数,计算贡献(x-靠右左端点)*(i-x). #include<iostream> #include ...
- BZOJ1012: [JSOI2008]最大数maxnumber [线段树 | 单调栈+二分]
1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 8748 Solved: 3835[Submi ...
- BZOJ1012最大数 [JSOI2008] 单调栈+二分
正解:单调栈+二分查找(or,线段树? 解题报告: 拿的洛谷的链接quq 今天尝试学习了下单调栈,然后就看到有个博客安利了这个经典例题?于是就去做了,感觉还是帮助了理解趴quqqqqq 这题,首先,一 ...
- 【bzoj4237】稻草人 分治+单调栈+二分
题目描述 JOI村有一片荒地,上面竖着N个稻草人,村民们每年多次在稻草人们的周围举行祭典. 有一次,JOI村的村长听到了稻草人们的启示,计划在荒地中开垦一片田地.和启示中的一样,田地需要满足以下条件: ...
随机推荐
- 【CF679B】Theseus and labyrinth(数学,贪心)
题意: 给一个m<=10^15,每次都减最接近当前值的立方数 让你找一个不大于m的最大的数并且这个数是减法次数最多的数 思路:见http://blog.csdn.net/miracle_ma/a ...
- 转 Python爬虫入门七之正则表达式
静觅 » Python爬虫入门七之正则表达式 1.了解正则表达式 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串 ...
- [转]常用iOS图片处理方法
自:http://blog.sina.com.cn/s/blog_8988732e0100xcx1.html ========== (one) UIImage 图像 等比例缩放=========== ...
- Scrapy学习-18-去重原理
Scrapy去重原理 scrapy本身自带一个去重中间件 scrapy源码中可以找到一个dupefilters.py去重器 源码去重算法 # 将返回值放到集合set中,实现去重 def reque ...
- 如何循序渐进向.NET架构师发展
微软的DotNet开发绝对是属于那种入门容易提高难的技术.而要能够成为DotNet架构师没有三年或更长时间的编码积累基本上是不可能的.特别是在大型软件项目中,架构师是项目核心成员,承上启下,因此RUP ...
- AC日记——圆桌聚餐 cogs 729
729. [网络流24题] 圆桌聚餐 ★★ 输入文件:roundtable.in 输出文件:roundtable.out 评测插件时间限制:1 s 内存限制:128 MB «问题描述: ...
- 使用vue-cli搭建element-ui项目
最近在使用element-ui搭建项目时发现若只纯用webpack来运行element-ui,要配置各种文件,对于新手来说实在太不友好了, 就想到用vue-cli来搭建整个vue项目 1.安装node ...
- Codeforces Gym101502 A.Very Hard Question
2017 JUST Programming Contest 3.0 昨天的训练赛,打的好难过,因为被暴打了,写了8题,他们有的写了9题,差了一道dp,博客上写7道题的题解. 因为有一道是套板子过的,并 ...
- Android 检查输入
在开发过程中,会经常遇到这样的需求:上面有很多的输入控件,等所有的输入都合法后,按钮才能自动变成enabled的状态,才能继续下一步的操作. 下面是一种用观察者模式实现的一种解决方案. button代 ...
- Android---简单的动画