1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| n,m,s=map(int,input().split()) w=[] v=[] sw=list(0 for i in range(n)) sv=list(0 for i in range(n)) sm=[] weight,value=0,0 ans=1e18 for i in range(n): weight,value=map(int,input().split()) w.append(weight) v.append(value)
for i in range(m): sm.append(list(map(int,input().split()))) def check(x): global ans sum=0 for i in range(n): if(w[i]>=x): if(i>0): sw[i]=sw[i-1]+1 sv[i]=sv[i-1]+v[i] else: sw[i]=1 sv[i]=v[i] else: if(i>0): sw[i]=sw[i-1] sv[i]=sv[i-1] else: sw[i]=0 sv[i]=0 for i in range(m): if((sm[i][0]-2)>=0): l=sm[i][0]-2 r=sm[i][1]-1 sum+=(sw[r]-sw[l])*(sv[r]-sv[l]) else: l=0 r=sm[i][1]-1 sum+=sw[r]*sv[r] ans=min(ans,abs(sum-s)) return sum<=s
lt,rt=0,max(w) while(lt+1<rt): mid=(lt+rt)//2 if(check(mid)): rt=mid else: lt=mid print(ans)
|