zoukankan      html  css  js  c++  java
  • 基础算法--有序离散化

    AcWing模板题:https://www.acwing.com/problem/content/804/

     1 #include<iostream>
     2 #include<vector>
     3 #include<algorithm>
     4 using namespace std;
     5 int n,m;
     6 const int N=3e5+10;
     7 vector<int>all;
     8 vector<pair<int,int>> add;
     9 vector<pair<int,int>>query;
    10 int a[N],s[N];
    11 int find(int x){
    12     //找到目标数x离散化之后的数
    13     int l=0,r=all.size()-1;
    14     while(l<r){
    15         int mid=l+r>>1;
    16         if(all[mid]>=x){
    17             r=mid;
    18         }else{
    19             l=mid+1;
    20         }
    21     }
    22     return l+1;//目的是让离散化之后的下标从1开始
    23 }
    24 int main(void){
    25     cin>>n>>m;
    26     for(int i=0;i<n;i++){
    27         int x,c;
    28         cin>>x>>c;
    29         add.push_back({x,c});
    30         all.push_back(x);
    31     }
    32     for(int i=0;i<m;i++){
    33         int l,r;
    34         cin>>l>>r;
    35         query.push_back({l,r});
    36         all.push_back(l);
    37         all.push_back(r);
    38     }
    39     
    40     sort(all.begin(),all.end());
    41     all.erase(unique(all.begin(),all.end()) ,all.end() );
    42     //去重
    43     for(int i=0;i<n;i++){
    44         int x=add[i].first;
    45         int c=add[i].second;
    46         a[find(x)]+=c;
    47     }
    48     //处理原数组
    49     for(int i=1;i<=all.size();i++){//all.size()是总数目,必须小于等于,同样也可以换成3e5+9
    50         s[i]=s[i-1]+a[i];
    51     }
    52     //处理前缀和
    53     for(int i=0;i<m;i++){
    54         int l=find(query[i].first);
    55         int r=find(query[i].second);
    56         cout<<s[r]-s[l-1]<<endl;
    57     }
    58     return 0;
    59 }
  • 相关阅读:
    Apriori 算法-如何进行关联规则挖掘
    Nginx 常用命令
    Nginx Location匹配规则
    Nginx 负载均衡
    angular 路由传参的三种方式
    JAVA中final关键字的作用
    Python函数参数和注解是什么
    JMeter测试计划配置项解析
    JMeter元件作用域实践指南
    原来Python函数只是个对象
  • 原文地址:https://www.cnblogs.com/greenofyu/p/13802563.html
Copyright © 2011-2022 走看看