zoukankan      html  css  js  c++  java
  • 二分基础(模板题)

    二分强化——全面查询

    TimeLimit:2000MS  MemoryLimit:128MB
    64-bit integer IO format:%lld
    已解决 | 点击收藏 | 已有5人收藏了本题
    Problem Description

    给出一个从递增的正整数序列a0,a1……an-1
    对不同的查询输出对应结果

    Input

    只有一组数据
    第一行是一个整数n,代表序列的长度(下标从0开始一直到n-1)
    接下来n个整数,代表序列对应位置上的数
    再接下来一行是一个整数m代表查询次数
    接下来m行
    接下来的每行是这5种类型之一
    0 x    代表查询数字x出现的最大下标,若不存在x输出-1
    1 x    代表查询数字x出现的最小下标,若不存在x输出-1
    2 x y  代表查询大于等于x且小于等于y的数字的个数,并保证x<=y
    3 x    代表查询比x大且下标最小的数字的大小,若不存在比x大的数字输出-1
    4 x    代表查询比x小且下标最大的数字的大小,若不存在比x小的数字输出-1
    n,m<10^5
    0<=ai,x,y<10^9

    Output

    输出对应结果,每个结果占一行

    SampleInput
    10 
    1 1 1 3 4 5 5 5 5 8
    5
    0 5
    1 5
    2 1 5
    3 4
    4 8
    
    SampleOutput
    8
    5
    9
    5
    5
      1 #include <iostream>
      2 #include <cstring>
      3 #include <algorithm>
      4 
      5 using namespace std;
      6 
      7 int arr[100005];
      8 int n,t;
      9 
     10 int Binaryone(int x){
     11     int left=0,right=n-1,ans,flag=0;
     12     while(left<=right){
     13         int mid=left+right>>1;
     14         if(arr[mid]<=x) left=mid+1,ans=mid;
     15         else if(arr[mid]>x){
     16             right=mid-1;
     17 //            if(arr[mid]==x&&flag==0){
     18 //                while(arr[mid]==x&&mid<n){
     19 //                    mid++;
     20 //                }
     21 //                ans=mid-1;
     22 //                flag=1;
     23 //            }
     24         }
     25     }
     26     return ans;
     27 }
     28 
     29 int Binarytwo(int x){
     30     int left=0,right=n-1,ans,flag=0;
     31     while(left<=right){
     32         int mid=left+right>>1;
     33         if(arr[mid]<x) left=mid+1;
     34         else if(arr[mid]>=x){
     35             right=mid-1;
     36             ans=mid;
     37         }
     38     }
     39     return ans;
     40 }
     41 
     42 
     43 int Binarythree(int x){
     44     int left=0,right=n-1,ans,flag=0;
     45     while(left<=right){
     46         int mid=left+right>>1;
     47         if(arr[mid]<=x) left=mid+1;
     48         else if(arr[mid]>x){
     49             right=mid-1;
     50             ans=mid;
     51         }
     52     }
     53     return arr[ans]>x?arr[ans]:-1;
     54 }
     55 
     56 int Binaryfour(int x){
     57     int left=0,right=n-1,ans,flag=0;
     58     while(left<=right){
     59         int mid=left+right>>1;
     60         if(arr[mid]<x) left=mid+1,ans=mid;
     61         else if(arr[mid]>=x){
     62             right=mid-1;
     63         }
     64     }
     65     return arr[ans]<x?arr[ans]:-1;
     66 }
     67 
     68 
     69 
     70 int main(){
     71     ios::sync_with_stdio(false);
     72     cin>>n;
     73     for(int i=0;i<n;i++) cin>>arr[i];
     74     cin>>t;
     75     int date;
     76     while(t--){
     77         cin>>date;
     78         int x,y;
     79         if(date==0){
     80             cin>>x;
     81             int zhi=Binaryone(x);
     82             if(arr[zhi]==x) cout << zhi << endl;
     83             else cout << -1 << endl;
     84         }
     85         else if(date==1){
     86             cin>>x;
     87             int zhi=Binarytwo(x);
     88             if(arr[zhi]==x) cout << zhi << endl;
     89             else cout << -1 << endl;
     90         }
     91         else if(date==2){
     92             cin>>x>>y;
     93             cout << Binaryone(y)-Binarytwo(x)+1 << endl;
     94         }
     95         else if(date==3){
     96             cin>>x;
     97             cout << Binarythree(x) << endl;
     98         }
     99         else if(date==4){
    100             cin>>x;
    101             cout << Binaryfour(x) << endl;
    102         }
    103     }
    104     return 0;
    105 }
    View Code
  • 相关阅读:
    Cannot run program "/home/mohemi/Program/adt-bundle-linux-x86_64-20130729/sdk//tools/emulator": error=2, 没有那个文件或目录
    在Ubuntu里部署Javaweb环境脑残版
    ios 内存管理 心得
    关于Servlet的PrintWriter 中文乱码问题
    流的对拷
    什么是javaBean
    ios 页面传值4种方式(四) 之通过delegate(代理)
    ios 页面传值4种方式(一) 之全局变量
    Block
    UIView动画学习笔记
  • 原文地址:https://www.cnblogs.com/qq-1585047819/p/11270200.html
Copyright © 2011-2022 走看看