【纪中集训2019.3.20】河

题目

描述

给出\(n\)条河流,每条河流是形式为\(k_{i}x+b_{i}\)的一次函数且只有\(x\)轴正半轴的部分;

河流的污染部分和另外一条河流的干净部分交汇,干净的部分会被污染;

有若干个工厂要建在\(b_{i}\)处,问有多少种方案使得所有的河流在无穷远处被污染;

答案对\(1e9+7\)取模

范围

$1 \le N \le 5 \times 10^5 ? ?, ??|k_{i}|,|b_{i}| \le 10^9 $

保证\(b_{i}\)互不相同;

题解

  • 需要先找到可以被一条河流污染的所以河流
  • 首先\(b_{j}<b_{i}且k_{j}>k_{i}\) 或者\(b_{j}>b_{i}且k_{j}<k_{i}\) 可以被直接污染;
  • 对于每一条起源在\(i\)下方的\(b_{j}<b_{i}且k_{j}>k_{i}\)河流\(j\) ,在河流\(i\)上方的部分会额外污染\(b_{l}>b_{i}且k_{l}<k_{i}\)的河流
  • 这样在下方我们就只需要考虑最大的\(k_{j}\)即可;
  • 同理在上方只需要考虑最小的\(k_{j}\);
  • 所以污染一条河流意味着污染一个按\(k\)排序的区间;
  • 剩下的就是线段覆盖,直接前缀和优化即可;
  • (不知道为什么不按左端点排序也可以\(AC\));
    #include<bits/stdc++.h>
    #define mod 1000000007
    using namespace std;
    const int N=500010;
    int n,m,sub[N],tot,rk[N],L[N],R[N],c[N];
    vector<int>g[N];
    char gc(){
      static char*p1,*p2,s[1000000];
      if(p1==p2)p2=(p1=s)+fread(s,1,1000000,stdin);
      return(p1==p2)?EOF:*p1++;
    }
    int rd(){
      int x=0,f=1;char c=gc();
      while(c<'0'||c>'9'){if(c=='-')f=-1;c=gc();}
      while(c>='0'&&c<='9')x=(x<<1)+(x<<3)+c-'0',c=gc();
      return x*f;
    }
    struct P{int x,y,id;}p[N];
    bool cmpy(const P&A,const P&B){return A.y==B.y?A.x<B.x:A.y<B.y;}
    bool cmpx(const P&A,const P&B){return A.x<B.x;}
    void inc(int&x,int y){x+=y;if(x>=mod)x-=mod;}
    void add(int x,int y){for(++x;x<=n+1;x+=x&-x)inc(c[x],y);}
    int ask(int x){int re=0;for(++x;x;x-=x&-x)inc(re,c[x]);return re;}
    int main(){
      freopen("river.in","r",stdin);
      freopen("river.out","w",stdout);
      n=rd();
      for(int i=1;i<=n;++i)p[i].x=rd(),p[i].y=rd(),p[i].id=i;
      sort(p+1,p+n+1,cmpy);
      for(int i=1;i<=n;++i)rk[p[i].id]=i;
      sort(p+1,p+n+1,cmpx);
      R[0]=0;for(int i=1;i<=n;++i)R[i]=max(R[i-1],rk[p[i].id]);
      L[n+1]=n+1;for(int i=n;i;--i)L[i]=min(L[i+1],rk[p[i].id]);
      for(int i=1;i<=n;++i)g[R[i]].push_back(L[i]);
      add(0,1);
      for(int i=1;i<=n;++i)
      for(int j=0;j<(int)g[i].size();++j){
          int l=g[i][j],tmp=ask(i);
          if(l>1)tmp=(tmp-ask(l-2)+mod)%mod;
          add(i,tmp);
      }
      int ans=(ask(n)-ask(n-1)+mod)%mod;
      cout<<ans<<endl;
      return 0;
    }

原文地址:https://www.cnblogs.com/Paul-Guderian/p/10574021.html

时间: 2024-08-30 14:52:42

【纪中集训2019.3.20】河的相关文章

【纪中集训2019.08.20】【JZOJ6310】Global warming

题目链接 题意: 给出一个长度为$n$的序列$\{a_n\}$. 已知一个正整数$x$,你有一次机会指定区间$[l,r]$,令$\forall i\in [l,r],\;a_i=a_i+d\,(|d|\le x)$. 求最大化的最长上升子序列的长度. $1 \le n \le 2 \times 10^5 , \quad 1 \le a_i,x \le 10^9$且均为正整数. 分析: 可以很容易发现三个性质: 性质一:抬升$[l,r]$不优于抬升$[l,n]$,降低$[l,r]$不优于降低$[1

【纪中集训2019.3.12】Mas的仙人掌

题意: ? 给出一棵\(n\)个点的树,需要加\(m\)条边,每条边脱落的概率为\(p_{i}\) ,求加入的边在最后形成图中仅在一个简单环上的边数的期望: 题解: 考虑每一条边的贡献是\((1-p_{i})*\Pi_{j}p_{j}(j!=i)\),这里\(j\)和\(i\)不能同时加入: 一条加入的边可以看成一条树上路径 ,即求所有和路径\(i\)相交的路径\(j\)的\(p_{j}\)的乘积: 将一条树上的链\((u,v)\)拆成两条\((u,lca)\)和\((v,lca)\); 这样会

【纪中集训2019.3.29】整除分块

题目 描述 ? 本题的背景是整除分块: ? 定义一个数列$a_{n,i} ? = ?\lfloor \frac{n}{i} \rfloor $ ; ? 求$\sum_{i=l}^{r} mex(a_n) $ ; ? 其中\(mex\)表示序列中最小的没有出现过的自然数: ? 答案对\(998244353\)取模 : 范围 ? \(1 \le T \le 65536 \ , \ 1 \le l ,r \le 10^{36}\) : ? 评测系统支持使用 $ _ _ int218 $ ,但是不能直接

【纪中集训2019.08.21】【JZOJ6315】数字

题目链接 题意: 设$s(i)$为将$1\sim i$看做字符串后依次连接形成的串.给定正整数$n$,求最小的$i$使得$n$是$s(i)$的字串.$T$组数据. $n\le 10^{17}, \; t\le 10^4$ 分析: 不能模拟$s(i)$的组成过程来找答案,时间不能承受. 也不能预处理$s(k)$,空间不能承受. 那就只能在$n$上找答案. 以下把数字当成字面量来讨论,更方便. 同时,这里讨论的前缀和后缀不包括本身. 思考一下,答案分为三种: 1.$ans=n$ 2.$n$由$ans

纪中集训2019.11.06

A.困难的图论 题目链接 题意: 给出由$n$个点和$m$条边构成的无向连通图,要求选出一些边.一条边被选中当且仅当它恰好被一个简单环经过. 一个环被称为简单环,当且仅当这个环上的所有点都只在这个环中被经过了一次. 输出这些边的编号的异或和.边从$1$开始编号. $1\le n\le 10^6,\;1\le m\le min\{10^6,n\times (n+1) /2\}$. 分析: 注意:一个图可能有很多简单环,题目要求选中所有简单环上的边.考场上我就是这一点搞错了.(其实搞对了也很可能做不

纪中集训2019.11.07

A.极好的问题 题目链接 题意: 咕 分析: 咕 实现: 咕 小结: 咕 B.背包问题 题目链接 题意: 咕 分析: 咕 实现: 咕 小结: 咕 C.子树问题 题目链接 题意: 咕 分析: 咕 小结: 咕 当天总结: 咕 原文地址:https://www.cnblogs.com/Hansue/p/11811824.html

纪中集训2019.11.09

A.搞笑的代码 题目链接 题意: 咕 分析: 咕 实现: 咕 小结: 咕 B.道路维护 题目链接 题意: 咕 分析: 咕 实现: 咕 小结: 咕 C.字符串查询 题目链接 题意: 咕 分析: 咕 实现: 咕 小结: 咕 当天总结: 咕 原文地址:https://www.cnblogs.com/Hansue/p/11826647.html

纪中集训2019.11.08

A.三角形计数 题目链接 题意: 咕 分析: 咕 实现: 咕 小结: 咕 B.Isaac 题目链接 题意: 咕 分析: 咕 实现: 咕 小结: 咕 C.字符消除 题目链接 题意: 咕 分析: 咕 实现: 咕 小结: 咕 当天总结: 咕 原文地址:https://www.cnblogs.com/Hansue/p/11826709.html

木兮的纪中集训感想

嗯 第一次写博客... 就记录一下我这个OI萌新在纪中集训的感受吧 ## 学校 对于纪中,我这几天下来还是非常认可这所学校的:全国最美中学名不虚传(宿舍除外),校园环境非常好,虽然建校将近百年,但维护工作做得非常到位,看不出太多时间的痕迹. 训练 抛开学校环境不讲,这里的教学也是非常棒的,我来这里之前一直觉得集训应该是一件非常累的事,但事实并没有我想象的那么坏.先放一个训练的时间表 8:00 ~ 11:20 打模拟 14:00 ~ 17:30 讲题+自己改程序 19:00 ~ 21:50 自习