• 今日头条(3-30)第四题(离线)


    题意:n对(a,b),q次查询(x,y) a>=x&&b>=y的对数

    对于100%数据,1<=所有的数<=1e5

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int maxn=1e5+5;
     4 int a[maxn],b[maxn],c[maxn];
     5 int x[maxn],y[maxn],z[maxn];
     6 int ans[maxn],sum[maxn];
     7 /*
     8     求ai>=x&&bi>=y的个数,有q组询问
     9     如果保证ai>=x,那么只要保证查询bi>=y的有多少个就可以了
    10     把a b按照a从大到小排序
    11     把x y按照x从大到小排序
    12     这样,对于一个(xi,yi)只要把所有a>=xi的,b加入树状数组或者线段数
    13     就能很快的查询b>=yi的个数
    14     n个数插入树状数组一次,复杂度O(nlog maxn)
    15     总共查询q次,复杂度O(nlog maxn)
    16     总体复杂度O((n+q)log maxn)
    17 */
    18 
    19 bool cmp1(int i,int j){
    20     if(a[i]==a[j])return b[i]>b[j];
    21     return a[i]>a[j];
    22 }
    23 bool cmp2(int i,int j){
    24     if(x[i]==x[j])return y[i]>y[j];
    25     return x[i]>x[j];
    26 }
    27 
    28 int lowbit(int x){return x&(-x);}
    29 
    30 int add(int x){
    31     while(x<maxn){
    32         c[x]++;
    33         x+=lowbit(x);
    34     }
    35 }
    36 
    37 int Sum(int x){
    38     int ret=0;
    39     while(x>0){
    40         ret+=sum[x];
    41         x-=lowbit(x);
    42     }
    43     return ret;
    44 }
    45 int main(){
    46     //freopen("in.txt","r",stdin);
    47     for(int i=1;i<maxn;i++)c[i]=i,z[i]=i;
    48     int n,q;
    49     cin>>n>>q;
    50     for(int i=0;i<n;i++)cin>>a[i];
    51     for(int i=0;i<n;i++)cin>>b[i];
    52     sort(c,c+n,cmp1);
    53     
    54     //离线
    55     for(int i=0;i<q;i++)cin>>x[i]>>y[i];
    56     sort(z,z+q,cmp2);
    57     
    58     int top=0;
    59     
    60     for(int i=0;i<q;i++){
    61         while(top<n&&a[c[top]]>=x[z[i]])add(b[c[top++]]);
    62         ans[z[i]]=top-Sum(y[z[i]]-1);
    63     }
    64     
    65     for(int i=0;i<q;i++)
    66         cout<<ans[i]<<endl;
    67     
    68     return 0;
    69 }
  • 相关阅读:
    日报 18/07/10
    meta标签
    map 和 vector 的erase函数说明
    Intel CPU MMX SSE SSE2/3/4指令集手册下载URL
    关于c中 int, float, double转换中存在的精度损失问题
    c++ 常数后缀说明
    STL中容器的push()或者push_back()函数的一点说明
    fprintf, fscanf,printf,scanf使用时参数注意
    操作系统 庞丽萍 第七章
    辨析全局变量的声明与定义
  • 原文地址:https://www.cnblogs.com/jihe/p/6650640.html
Copyright © 2020-2023  润新知