计蒜客第六场

Posted 可是我不配

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计蒜客第六场相关的知识,希望对你有一定的参考价值。

非要手打线段树 

出事了吧……

 

  1 #include<bits/stdc++.h>
  2 #define cl(a,b) memset(a,b,sizeof(a))
  3 #define debug(x) cerr<<#x<<"=="<<(x)<<endl
  4 using namespace std;
  5 typedef long long ll;
  6 typedef pair<int,int> pii;
  7 
  8 #define ls getid(l,l+r>>1)
  9 #define rs getid((l+r>>1)+1,r)
 10 #define lson l,m,ls
 11 #define rson m+1,r,rs
 12 
 13 typedef long long ll;
 14 
 15 const int maxn = 2e5+10;
 16 
 17 pii p[maxn];
 18 
 19 inline int getid(int x,int y)
 20 {
 21     return x+y|y!=x;
 22 }
 23 
 24 int rm[maxn<<1],col[maxn<<1];
 25 
 26 void pushup(int l,int r,int rt)
 27 {
 28     rm[rt]=min(rm[ls],rm[rs]);
 29 }
 30 
 31 void build(int l,int r,int rt)
 32 {
 33     if(l == r)
 34     {
 35         scanf("%d",&rm[rt]);
 36         return ;
 37     }
 38     int m=l+r>>1;
 39     build(lson);
 40     build(rson);
 41     pushup(l,r,rt);
 42 }
 43 
 44 int query(int L,int R,int l,int r,int rt)
 45 {
 46     if( L<=l && r<=R )
 47     {
 48         return rm[rt];
 49     }
 50     int m=l+r>>1;
 51     int ret = 1e10;
 52     if( L<=m ) ret = min(ret,query(L,R,lson));
 53     if( m+1<=R ) ret = min(ret,query(L,R,rson));
 54     return ret;
 55 }
 56 
 57 int main()
 58 {
 59     int n,m,k;
 60     scanf("%d%d",&n,&k);
 61     build(1,n,1);
 62     scanf("%d",&m);
 63     for(int i=0; i<m; i++)
 64     {
 65         int a,b;
 66         scanf("%d%d",&a,&b);
 67         p[i] = {a,b};
 68     }
 69     int ans=0;
 70     for(int i=0; i<m; i++)
 71     {
 72         for(int j=0; j<i; j++)
 73         {
 74             pii tmpa=p[i];
 75             pii tmpb=p[j];
 76             if(tmpa.first > tmpb.first)
 77             {
 78                 swap(tmpa,tmpb);
 79             }
 80             int tmp=min(tmpa.second,tmpb.second);
 81             tmp=min(tmp,query(tmpa.first,tmpb.first,1,n,1));
 82             if(tmpa.second + tmpb.second - tmp
 83              - tmpa.first + tmpb.first - tmp <= k)
 84             {
 85                 ans++;
 86             }
 87         }
 88     }
 89     printf("%d\n",ans);
 90     return 0;
 91 }/*
 92 
 93 5 7
 94 4 1 1 3 1
 95 3
 96 1 4
 97 3 1
 98 4 3
 99 
100 */

 

以上是关于计蒜客第六场的主要内容,如果未能解决你的问题,请参考以下文章

计蒜客第五场 UCloud 的安全秘钥(中等) (尺取游标法

计蒜客练习题:素数距离

计蒜客--八皇后问题

计蒜客斑点蛇

计蒜客之判断质数

计蒜客课程竞赛入门--统计三角形 代码流程摘记