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

所以我们可以处理出,每个数的控制区间[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. 《鸟哥的Linux私房菜》学习笔记(8)——bash脚本编程之变量

    一.变量命名                                                             1.只能包含字母.数字和下划线,并且不能以数字开头,    2.不 ...

  2. vue-cli 中引入 jq

    vue-cli webpack 引入jquery   今天费了一下午的劲,终于在vue-cli 生成的工程中引入了jquery,记录一下.(模板用的webpack) 首先在package.json里的 ...

  3. loj2308 「APIO2017」商旅

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

  4. Oracle数据库迁移--->从Windows到Linux

    I did a practice to migrate the oracle database from windows to linux operation system. The followin ...

  5. Assigning Logon Hours

    Assigning Logon Hours Updated: March 28, 2003 Applies To: Windows Server 2003, Windows Server 2003 R ...

  6. leetcode 【 Minimum Path Sum 】python 实现

    题目: Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right w ...

  7. 线段树&树状数组模板

    树状数组: #include <bits/stdc++.h> using namespace std; ; struct binit { int a[MAXN], n; void modi ...

  8. [oldboy-django][2深入django]django模板使用函数

    1 模板引入子html--include 模板引擎 - 母版 - include,导入公共的html a. 用法:{% include "pub.html" %}, pub.htm ...

  9. Ognl对象图导航语言 源码

    // -------------------------------------------------------------------------- // Copyright (c) 1998- ...

  10. hadoop自定义权限

    #1.测试类想运行hadoop的测试类,我们必须先编译hadoop mac下编译hadoop-2.7.4 然后查看测试类 org.apache.hadoop.hdfs.server.namenode. ...