可以很容易的发现,如果选了最高的房子,那么就不能再选了;否则在左边选一坨合法的,在右边选一坨合法的,拼起来还是合法的。

所以我们可以处理出,每个数的控制区间[L,R] (保证这个区间是其他数都小于它的极大区间),以及左边右边最大的比它小的数的位置(在区间里)。

这样我们就可以做到类似线段树的分割并合并区间的答案。

但还有一个问题,,,这样建树的话,最高深度可能是O(N)的,这样不就gg了???

但是数据是随机的啊,,,期望log N.  (好像这种根据权值分割树的数据结构叫笛卡尔树?)

#include<iostream>
#include<cstdio>
#define ll long long
using namespace std;
const int maxn=100005,ha=1e9+7;
int L[maxn],R[maxn],S[maxn],tp,le;
int n,m,H[maxn],V[maxn],Q,W[maxn],ri;
inline int add(int x,int y){ x+=y; return x>=ha?x-ha:x;}
inline int Merge(int o,int x,int y){ return add(add(x*(ll)y%ha,x),add(y,V[o]));}
void build(int o,int l,int r){
if(L[o]) build(L[o],l,o-1);
if(R[o]) build(R[o],o+1,r);
W[o]=Merge(o,W[L[o]],W[R[o]]);
} int query(int o,int l,int r){
if(!o) return 0;
if(l>=le&&r<=ri) return W[o];
else if(le>o) return query(R[o],o+1,r);
else if(ri<o) return query(L[o],l,o-1);
else return Merge(o,query(L[o],l,o-1),query(R[o],o+1,r));
} inline void prework(){
for(int i=1;i<=n;i++){
int t=tp;
while(t&&H[S[t]]<H[i]) t--;
if(t<tp) L[i]=S[t+1];
if(t) R[S[t]]=i;
S[tp=++t]=i;
} build(S[1],1,n);
} inline void solve(){
while(Q--){
scanf("%d%d",&le,&ri);
printf("%d\n",query(S[1],1,n));
}
} int main(){
freopen("monopoly.in","r",stdin);
freopen("monopoly.out","w",stdout); scanf("%d%d",&n,&Q);
for(int i=1;i<=n;i++) scanf("%d",H+i);
for(int i=1;i<=n;i++) scanf("%d",V+i);
prework();
solve();
return 0;
}

  

某考试 T1 monopoly的更多相关文章

  1. 考试T1总结(又CE?!)

    考试T1CE... 最近不适合考试 T1 扶苏是个喜欢一边听古风歌一边写数学题的人,所以这道题其实是五三原题.歌曲中的主人公看着墙边的海棠花,想起当年他其实和自己沿着墙边种了一排海棠,但是如今都已枯萎 ...

  2. 某考试T1 game

    题目背景 无 题目描述 Alice 和 Bob 在一个圆环上玩游戏.圆环上有 n 个位置,按照顺时针顺序 依次标号为 1 到 n.Alice 和 Bob 分别有一个数字集合,集合中都是在 [1, n− ...

  3. 某考试 T1 arg

    题目描述 给出一个长度为 m 的序列 A, 请你求出有多少种 1...n 的排列, 满足 A 是它的一个 LIS. 输入格式 第一行两个整数 n, m. 接下来一行 m 个整数, 表示 A. 输出格式 ...

  4. 某考试 T1 lcm

    把lcm写成 (a+n)*(b+n) / gcd(a+n,b+n). 因为gcd可以辗转相减,所以就成了gcd(abs(a-b),a+n),一个常量一个变量之间的gcd,我们可以直接把abs(a-b) ...

  5. 2019.2.25考试T1, 矩阵快速幂加速递推+单位根反演(容斥)

    \(\color{#0066ff}{题解}\) 然后a,b,c通过矩阵加速即可 为什么1出现偶数次3没出现的贡献是上面画绿线的部分呢? 考虑暴力统计这部分贡献,答案为\(\begin{aligned} ...

  6. 2019.2.14 考试T1 FFT

    \(\color{#0066ff}{ 题目描述 }\) 衡水二中的机房里经常有人莫名其妙地犇雷,leizi很生气,决定要找出那个犇雷的人 机房有n个人,每个人都认为机房里有两个人可能会犇雷,其中第i个 ...

  7. 某考试 T1 fair (18.5.1版)

    转化一下模型:每天可以选1也可以选0,但是任意前i天(i<=n)1的个数都必须>=0的个数,求总方案数/2^n. 然后可以发现这是一个经典题,随便推一下公式发现等于  C(n,n/2)/2 ...

  8. 某考试 T1 str

    一开始死磕sam,发现根本没法做...... 后来想了想,反正匹配子串的大部分不是sam就是 二分+hash啊,,,于是就想了想二分+hash,发现好像可以做啊! 就是假设我们要让 s1[1] 映射到 ...

  9. 某考试 T1 Hello my friend

    Discription

随机推荐

  1. Java程序占用实际内存大小

    很多人错误的认为运行Java程序时使用-Xmx和-Xms参数指定的就是程序将会占用的内存,但是这实际上只是Java堆对象将会占用的内存.堆只是影响Java程序占用内存数量的一个因素.要更好的理解你的J ...

  2. Event log c++ sample.

    1. Init regedit. bool InitLog( TCHAR *logName, TCHAR *sourceName, TCHAR *MessageDllName ) { // This ...

  3. loj2308 「APIO2017」商旅

    ref #include <iostream> #include <cstring> #include <cstdio> #include <queue> ...

  4. SXCPC2018 nucoj2007 和Mengjiji一起攻克难关

    problem #include <algorithm> #include <iostream> #include <cstdio> using namespace ...

  5. WCF,WebServices,WebApi区别

    http://www.cnblogs.com/hetring/p/4493137.html

  6. MYSQL学习心得(转)

    适合有SQL SERVER或ORACLE基础的人看,有对比,学习更有效果 转自:http://www.cnblogs.com/lyhabc/ 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习 ...

  7. [oldboy-django][2深入django]xss攻击 + csrf

    1 xss攻击 xss攻击(跨站脚本攻击,用户页面提交数据来盗取cookie) - 慎用safe, 和mark_safe -- 如果要用,必须要过滤 - 定义: 用户提交内容,在页面展示用html显示 ...

  8. java I/O类 File使用

    11.3 I/O类使用 由于在IO操作中,需要使用的数据源有很多,作为一个IO技术的初学者,从读写文件开始学习IO技术是一个比较好的选择.因为文件是一种常见的数据源,而且读写文件也是程序员进行IO编程 ...

  9. log4net实现多实例记录

    原文地址:实现多个LOG4NET日志记录器实例 本文内容为摘抄,请查看原文. 对于.NET Framework开发者来说,使用Log4Net进行日志记录是非常方便的,通常只要写好配置文件和简单的编码就 ...

  10. Linux系统基础优化总结

    请称呼我搬运工,哈哈 优化综合 https://www.cnblogs.com/yinshoucheng-golden/p/6149556.html (1)不用root管理,以普通用户的名义通过sud ...