• Codeforces 1156E Special Segments of Permutation(单调栈)


    可以用单调栈直接维护出ai所能覆盖到的最大的左右范围是什么,然后我们可以用这个范围暴力的去查询这个区间的是否有满足的点对,一个小坑点,要对左右区间的大小进行判断,只需要去枚举距离i最近的一段区间去枚举即可,复杂度On,如果不判断可以退化成n^2。

    10

    1 2 3 4 5 6 7 8 9 10

     1 //      ——By DD_BOND 
     2 
     3 //#include<bits/stdc++.h>
     4 #include<functional>
     5 #include<algorithm>
     6 #include<iostream>
     7 #include<sstream>
     8 #include<iomanip>
     9 #include<climits>
    10 #include<cstring>
    11 #include<cstdlib>
    12 #include<cstddef>
    13 #include<cstdio>
    14 #include<memory>
    15 #include<vector>
    16 #include<cctype>
    17 #include<string>
    18 #include<cmath>
    19 #include<queue>
    20 #include<deque>
    21 #include<ctime>
    22 #include<stack>
    23 #include<map>
    24 #include<set>
    25 
    26 #define fi first
    27 #define se second
    28 #define MP make_pair
    29 #define pb push_back
    30 #define INF 0x3f3f3f3f
    31 #define pi 3.1415926535898
    32 #define lowbit(a)  (a&(-a))
    33 #define lson l,(l+r)/2,rt<<1
    34 #define rson (l+r)/2+1,r,rt<<1|1
    35 #define Min(a,b,c)  min(a,min(b,c))
    36 #define Max(a,b,c)  max(a,max(b,c))
    37 #define debug(x)  cerr<<#x<<"="<<x<<"
    ";
    38 
    39 using namespace std;
    40 
    41 typedef long long ll;
    42 typedef pair<int,int> P;
    43 typedef pair<ll,ll> Pll;
    44 typedef unsigned long long ull;
    45 
    46 const ll LLMAX=2e18;
    47 const int MOD=1e9+7;
    48 const double eps=1e-8;
    49 const int MAXN=1e6+10;
    50 
    51 inline ll sqr(ll x){ return x*x; }
    52 inline int sqr(int x){ return x*x; }
    53 inline double sqr(double x){ return x*x; }
    54 ll gcd(ll a,ll b){ return b==0? a: __gcd(b,a%b); }
    55 ll exgcd(ll a,ll b,ll &x,ll &y){ ll d; (b==0? (x=1,y=0,d=a): (d=exgcd(b,a%b,y,x),y-=a/b*x)); return d; }
    56 ll qpow(ll a,ll n){ll sum=1;while(n){if(n&1)sum=sum*a%MOD;a=a*a%MOD;n>>=1;}return sum;}
    57 inline int dcmp(double x){  if(fabs(x)<eps) return 0;   return (x>0? 1: -1); }
    58 
    59 int id[MAXN],a[MAXN],l[MAXN],r[MAXN];
    60 
    61 int main(void)
    62 {
    63     ios::sync_with_stdio(false);    cin.tie(0);   cout.tie(0);   
    64     int n,ans=0;  cin>>n;
    65     for(int i=1;i<=n;i++){
    66         cin>>a[i];
    67         id[a[i]]=i;
    68     }
    69     a[0]=a[n+1]=INF;
    70     stack<int>q;    q.push(0);
    71     for(int i=1;i<=n;i++){
    72         while(a[q.top()]<a[i])    q.pop();
    73         l[i]=q.top()+1;
    74         q.push(i);
    75     }
    76     while(!q.empty())   q.pop();
    77     q.push(n+1);
    78     for(int i=n;i>=1;i--){
    79         while(a[q.top()]<a[i])    q.pop();
    80         r[i]=q.top()-1;
    81         q.push(i);
    82     }   
    83     for(int i=1;i<=n;i++){
    84         if(i-l[i]<r[i]-i){
    85             for(int j=l[i];j<i;j++)
    86                 if(id[a[i]-a[j]]>i&&id[a[i]-a[j]]<=r[i])
    87                     ans++;
    88         }
    89         else{
    90             for(int j=i+1;j<=r[i];j++)
    91                 if(id[a[i]-a[j]]<i&&id[a[i]-a[j]]>=l[i])
    92                     ans++;
    93         }
    94     }
    95     cout<<ans<<endl;
    96     return 0;
    97 }
  • 相关阅读:
    mysql 数据库集群连接配置
    tomcat server.xml 配置优化
    使用PowerDesigner16.5 逆向数据库生产表结构或导出word文档
    SpringBoot、thymeleaf 国际化配置
    解决 SpringBoot 跨域请求问题
    在 centos7 系统中用 docker 创建 tomcat 服务镜像
    JAVA 调用 com.google.protobuf
    登录后获取token,作为参数传入下一个操作
    通过二进制数据流方式上传图片及性能测试脚本编写
    信息服务(ISS)管理器之报错【"/"应用程序中的服务器错误。】
  • 原文地址:https://www.cnblogs.com/dd-bond/p/10815288.html
Copyright © 2020-2023  润新知