wmq2006 @ 2020-07-25 08:56:37
#include<iostream>
#include<iomanip>
#include<algorithm>
#include<queue>
#include<map>
#include<stack>
#include<cmath>
#include<cstring>
#include<string>
#include<cstdio>
using namespace std;
int w[300001],v[300001],l[300001],r[300001],n,m,s,cnt=0;
long long qw[200001]={0},qv[200001]={0};
long long ans=1e15,answ=0;
long long u=0,d=1e15,mid;
long long check(int k){
long long cnt=0;
for(int i=1;i<=n;i++)qw[i]=0,qv[i]=0;
for(int i=1;i<=n;i++){
if(w[i]>=k){
qw[i]=qw[i-1]+1;
qv[i]=qv[i-1]+v[i];
}
else{
qw[i]=qw[i-1];
qv[i]=qv[i-1];
}
}
for(int i=1;i<=m;i++)cnt+=(qv[r[i]]-qv[l[i]-1])*(qw[r[i]]-qw[l[i]-1]);
return cnt;
}
int main(){
//freopen("qc.in","r",stdin);
//freopen("qc.out","w",stdout);
cin>>n>>m>>s;
for(int i=1;i<=n;i++){
cin>>w[i]>>v[i];
//u=max(u,w[i]);
//d=min(d,w[i]);
}
u=1e6;
d=0;
for(int i=1;i<=m;i++)cin>>l[i]>>r[i];
while(d<u){
mid=(u+d)/2;
//cout<<mid<<" "<<check(mid)<<endl;
if(check(mid)<s)u=mid-1;
if(check(mid)>s)d=mid+1;
if(abs(check(mid)-s)<ans)ans=abs(check(mid)-s);
if(check(mid)==s){cout<<ans<<endl;return 0;}
}
cout<<ans<<endl;
return 0;
}
只要n,m大于1000就无法输入,我的电脑上只有Linux,哪位好心人有DEV-C++帮我看一下在CEV编译器里能不能正常输入
另外能不能帮我看看这个题为什么输入不了,真的,感觉题真的不难,看看自己代码的思路也和题解的差不多
by ducati @ 2020-07-25 09:04:36
本蒟蒻来仔细调试一下您的代码
by wmq2006 @ 2020-07-25 09:05:35
@ducati 您看看DEVc++能行吗
by ducati @ 2020-07-25 09:06:07
我这边一点问题都没有
by ducati @ 2020-07-25 09:06:24
样例过了
by ducati @ 2020-07-25 09:07:25
可能是您思路的问题
by ducati @ 2020-07-25 09:07:43
不,不是思路,可能代码有一些小问题,导致WA;而且输出的不是乱码……
by wmq2006 @ 2020-07-25 09:08:13
@ducati 不是,你测一下1000,1000的数据,随便随机一个就行
by wmq2006 @ 2020-07-25 09:08:39
@ducati 1000 1000规模的数据输入不了,正常的小于1000的都行
by ducati @ 2020-07-25 09:09:07
我测了,没问题
by ducati @ 2020-07-25 09:09:28
我先溜了,要上课