• BZOJ1067 SCOI2007 降雨量


    分类讨论是比较好的,直接脑补容易炸。

    本来以为是水题,后来发现是神题……

     1 #include<bits/stdc++.h>
     2 #define rep(a,b,c) for(int a=b;a<=c;a++)
     3 using namespace std;
     4 
     5 int a[5000005],b[5000005],n,m,t1,t2,t3,t4,li[1000005],q1[1000005],q2[1000005],lcnt,r1[1000005],r2[1000005],seq[1000005];
     6 
     7 void pushin(int p){
     8     li[++lcnt]=p; li[++lcnt]=p+1; li[++lcnt]=p-1;
     9 }
    10 
    11 void build(int p,int l,int r) {
    12     if(l==r) a[p]=seq[l], b[p]=(seq[l]>1e+9?0:seq[l]);
    13     else build(p*2,l,(l+r)/2), build(p*2+1,(l+r)/2+1,r), a[p]=max(a[p*2],a[p*2+1]), b[p]=max(b[p*2],b[p*2+1]);
    14 }
    15 
    16 int query(int p,int l,int r,int ql,int qr) {
    17     if(l>qr||r<ql) return 0;
    18     if(l>=ql&&r<=qr) return a[p];
    19     return max(query(p*2,l,(l+r)/2,ql,qr),query(p*2+1,(l+r)/2+1,r,ql,qr));
    20 }
    21 
    22 int query2(int p,int l,int r,int ql,int qr) {
    23     if(l>qr||r<ql) return 0;
    24     if(l>=ql&&r<=qr) return b[p];
    25     return max(query2(p*2,l,(l+r)/2,ql,qr),query2(p*2+1,(l+r)/2+1,r,ql,qr));
    26 }
    27 
    28 int main(){
    29     
    30     scanf("%d",&n);
    31     rep(i,1,n) scanf("%d%d",&r1[i],&r2[i]), pushin(r1[i]);
    32     
    33     scanf("%d",&m);
    34     rep(i,1,m) scanf("%d%d",&q1[i],&q2[i]), pushin(q1[i]), pushin(q2[i]);
    35     
    36     sort(li+1,li+lcnt+1);
    37     lcnt=unique(li+1,li+lcnt+1)-li-1;
    38     
    39     rep(i,1,n) r1[i]=lower_bound(li+1,li+lcnt+1,r1[i])-li;
    40     rep(i,1,m) q1[i]=lower_bound(li+1,li+lcnt+1,q1[i])-li, q2[i]=lower_bound(li+1,li+lcnt+1,q2[i])-li;
    41     
    42     rep(i,1,lcnt) seq[i]=2e+9;
    43     rep(i,1,n) seq[r1[i]]=r2[i];
    44     
    45     build(1,1,lcnt);
    46     
    47     rep(i,1,m) {
    48         int tmp=query(1,1,lcnt,q1[i]+1,q2[i]-1),tmp2=query2(1,1,lcnt,q1[i]+1,q2[i]-1);
    49         int I=seq[q1[i]],J=seq[q2[i]];
    50         if(I==2e+9 && J==2e+9) printf("maybe
    ");
    51         else if(I==2e+9) if(tmp2>=J) printf("false
    "); else printf("maybe
    ");
    52         else if(J==2e+9) if(tmp2>=I) printf("false
    "); else printf("maybe
    ");
    53         else if(J>I || tmp2>=J) printf("false
    "); else if(tmp==2e+9) printf("maybe
    "); else printf("true
    ");
    54     }
    55 }
  • 相关阅读:
    动态规划算法-3
    动态规划算法-2
    动态规划算法-1
    滑动窗口算法-3
    央行副行长提示金融风险:地方偿债高峰期到来
    银行卡换“芯” 更要银行换心
    破解IT运维成本困境,专业化分工是妙方
    php连接mysql
    ajax原生验证用户名是否存在
    ajax跨域问题
  • 原文地址:https://www.cnblogs.com/mollnn/p/8504062.html
Copyright © 2020-2023  润新知