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 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端