关注
第一题,应评论区要求,贴一下;特别是那个多线程的,现在这方面水平不高,求喷求指正
//普通版(大量查询会超时,过了82%)
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
int n;
cin>>n;
vector<int> everysum(n,0);
for(int i=0;i<n;++i){
cin>>everysum[i];
}
for(int i=1;i<n;++i){
everysum[i]+=everysum[i-1];
}
int Q;
cin>>Q;
vector<int> Query(Q);
for(int i=0;i<Q;++i){
cin>>Query[i];
}
for(int i=0;i<Q;++i){
int result;
vector<int>::iterator it;
it=lower_bound(everysum.begin(),everysum.end(),Query[i]);
if(it==everysum.end())
result=n;
else
result=(int)(it-everysum.begin()+1);
cout<<result<<endl;
}
return 0;
}
//多线程版(可能有错,以前没怎么写过,这个还没测试,欢迎指正)
#include <iostream>
#include <vector>
#include <algorithm>
#include <thread>
using namespace std;
void thread_task(vector<int>& everysum,vector<int>& Query,vector<int>& group,int start,int end,int n){
for(int i=start;i<end;++start){
vector<int>::iterator it;
it=lower_bound(everysum.begin(),everysum.end(),Query[start]);
if(it==everysum.end())
group[start]=n;
else
group[start]=(int)(it-everysum.begin()+1);
}
}
int main()
{
int n;
cin>>n;
vector<int> everysum(n);
cin>>everysum[0];
for(int i=1;i<n;++i){
int tmp;
cin>>tmp;
everysum[i]=everysum[i-1]+tmp;
}
int Q;
cin>>Q;
vector<int> Query(Q);
for(int i=0;i<Q;++i){
cin>>Query[i];
}
if(Q>1000){//大于1000就开多线程
vector<int> group(Q);
int numOfThread=Q/1000;
for(int i=0;i<numOfThread;++i){
int start=i*1000;
int end=start+1000;
thread t(thread_task(everysum,Query,group,start,end,n));
t.join();
}
thread t(thread_task(everysum,Query,group,numOfThread*1000+1,Q,n));
t.join();
for(int val:group){
cout<<val<<endl;
}
}
else{//小于1000就没必要开线程了
for(int i=0;i<Q;++i){
int result;
vector<int>::iterator it;
it=lower_bound(everysum.begin(),everysum.end(),Query[i]);
if(it==everysum.end())
result=n;
else
result=(int)(it-everysum.begin()+1);
cout<<result<<endl;
}
}
return 0;
}
查看原帖
点赞 2
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 为了入行xx岗,我学了__ #
6502次浏览 109人参与
# 你都见过什么样的草台班子? #
8261次浏览 71人参与
# 实习的你做了哪些离谱的工作 #
10029次浏览 123人参与
# 被说“做题家”,你的反应是_____? #
2575次浏览 73人参与
# 简历第一个项目做什么 #
7598次浏览 116人参与
# 找实习记录 #
35026次浏览 552人参与
# 工作压力大,你会干什么? #
14209次浏览 320人参与
# Prompt分享 #
2902次浏览 84人参与
# 如果不上班,你会去做什么 #
7552次浏览 278人参与
# AI让你的思考变深了还是变浅了? #
5186次浏览 141人参与
# 邪修省钱套路 #
7844次浏览 247人参与
# 查收我的offer竞争力报告 #
268814次浏览 1662人参与
# 我的付费上班经历 #
14799次浏览 207人参与
# 机械人,秋招第一次笔试的企业是哪家? #
86299次浏览 621人参与
# 如果让你发明个APP,你会想做什么 #
2261次浏览 54人参与
# 秋招我要惩罚这些公司 #
8631次浏览 36人参与
# 参加哪些竞赛对找工作有帮助? #
8386次浏览 142人参与
# 大城市找工作会更容易吗 #
57065次浏览 377人参与
# 小厂实习有必要去吗 #
78162次浏览 369人参与
# 大厂VS公务员你怎么选 #
78143次浏览 691人参与

