区间和

模板
模板来自AcWing

vector<int> alls; // 存储所有待离散化的值
sort(alls.begin(), alls.end()); // 将所有值排序
alls.erase(unique(alls.begin(), alls.end()), alls.end());   // 去掉重复元素

// 二分求出x对应的离散化的值
int find(int x) // 找到第一个大于等于x的位置
{
    int l = 0, r = alls.size() - 1;
    while (l < r)
    {
        int mid = l + r >> 1;
        if (alls[mid] >= x) r = mid;
        else l = mid + 1;
    }
    return r + 1; // 映射到1, 2, ...n
}

题目:

区间和
假定有一个无限长的数轴,数轴上每个坐标上的数都是0。

现在,我们首先进行 n 次操作,每次操作将某一位置x上的数加c。

接下来,进行 m 次询问,每个询问包含两个整数l和r,你需要求出在区间[l, r]之间的所有数的和。

输入格式
第一行包含两个整数n和m。

接下来 n 行,每行包含两个整数x和c。

再接下里 m 行,每行包含两个整数l和r。

输出格式
共m行,每行输出一个询问中所求的区间内数字和。

数据范围
−109≤x≤109,
1≤n,m≤105,
−109≤l≤r≤109,
−10000≤c≤10000
输入样例:
3 3
1 2
3 6
7 5
1 3
4 6
7 8
输出样例:
8
0
5

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
const int N=3e5+10;
typedef pair<int,int> PII;
int n,m;
int a[N],s[N];
vector<int>alls;
vector<PII>add,query;

int find(int x){
    int l=0,r=alls.size()-1;
    while(l<r){
        int mid=l+r>>1;
        if(alls[mid]>=x)r=mid;
        else l=mid+1;
    }
    return r+1;
}


int main(){
    cin>>n>>m;
    for(int i=0;i<n;i++){
        int x,c;
        cin>>x>>c;
        add.push_back({x,c});//将位置x上的数加c
        alls.push_back(x);//记录x
    }
    for(int i=0;i<m;i++){
        int l,r;
        cin>>l>>r;
        query.push_back({l,r});//记录l和r
        alls.push_back(l);
        alls.push_back(r);
    }
    //去重
    sort(alls.begin(), alls.end()); // 将所有值排序
    alls.erase(unique(alls.begin(), alls.end()), alls.end());   // 去掉重复元素
    //处理插入
    for(auto item:add){
        int x=find(item.first);//返回x在alls中的位置
        a[x]+=item.second;
    }
    //处理前缀和
    for(int i=1;i<=alls.size();i++)//a数组的长度就是alls数组的长度
        s[i]=s[i-1]+a[i];
    for(auto item:query){
        int l=find(item.first),r=find(item.second);
        cout<<s[r]-s[l-1]<<endl;
    }
    return 0;
}

在Python中,你可以使用列表或者字典来设置商品的价格区间和排序。下面是一些示例代码来帮助你实现这个功能: 1. 设置商品价格区间: 你可以使用列表来存储商品的价格,并根据价格区间进行筛选。例如,假设你有一个商品列表`products`,其中每个商品都有一个`price`属性,你可以使用以下代码来筛选出价格在某个区间内的商品: ```python def filter_products_by_price(products, min_price, max_price): filtered_products = [] for product in products: if min_price <= product.price <= max_price: filtered_products.append(product) return filtered_products ``` 这个函数接受一个商品列表`products`,以及最小价格`min_price`和最大价格`max_price`作为参数。它会遍历商品列表,将价格在指定区间内的商品添加到一个新的列表`filtered_products`中,并返回该列表。 2. 对商品进行排序: 如果你想对商品按照价格进行排序,你可以使用Python的内置函数`sorted()`。以下是一个示例代码: ```python def sort_products_by_price(products): sorted_products = sorted(products, key=lambda x: x.price) return sorted_products ``` 这个函数接受一个商品列表`products`作为参数,并使用`sorted()`函数对商品列表进行排序。通过指定`key`参数为一个lambda函数,我们可以按照商品的价格进行排序。 希望以上代码能够帮助你实现商品价格区间的设置和排序。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值