QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#685242#9529. Farm ManagementY_J_Y#WA 1ms9836kbC++202.3kb2024-10-28 18:26:252024-10-28 18:26:26

Judging History

你现在查看的是最新测评结果

  • [2024-10-28 18:26:26]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:9836kb
  • [2024-10-28 18:26:25]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define root 1,n,1
#define ls (rt<<1)
#define rs (rt<<1|1)
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define pd __gnu_pbds
inline ll read() {
	ll x=0,w=1;char ch=getchar();
	for(;ch>'9'||ch<'0';ch=getchar()) if(ch=='-') w=-1;
	for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0';
	return x*w;
}
inline void print(__int128 x){
	if(x<0) {putchar('-');x=-x;}
	if(x>9) print(x/10);
	putchar(x%10+'0');
}
#define maxn 1000010
#define int long long 
const double eps=1e-8;
#define	int_INF 0x3f3f3f3f
#define ll_INF 0x3f3f3f3f3f3f3f3f
struct Node{
	int w,l,r;
	bool operator < (const Node &rhs) const {
		return w>rhs.w;
	}
}node[maxn];
int lowbit(int x) {
	return x&-x;
}
int tree[maxn];int limit=2e5;
void Add(int pos,int val) {
	while(pos<=limit) {
		tree[pos]+=val;
		pos+=lowbit(pos);
	}
}
int Query(int pos) {
	int ans=0;
	while(pos) {
		ans+=tree[pos];
		pos-=lowbit(pos);
	}
	return ans;
}
int lsum1[maxn],lsum2[maxn];int lsum3[maxn];
signed main() {
	int n=read();int m=read();
	int sum=0;int sum2=0;
	for(int i=1;i<=n;i++) {
		node[i].w=read();node[i].l=read();node[i].r=read();
		sum+=node[i].l;
		sum2+=node[i].l*node[i].w;
	}
	sort(node+1,node+n+1);
	for(int i=1;i<=n;i++) {
		Add(i,node[i].r-node[i].l);
		lsum1[i]=lsum1[i-1]+node[i].l*node[i].w;
		lsum2[i]=lsum2[i-1]+node[i].r*node[i].w;
	}
	int ans=-1;
	ans=max(ans,sum2+node[1].w*(m-sum));
	for(int i=1;i<=n;i++) {
		int opt=m-sum+node[i].l;
		if(opt>=Query(i-1)) {
			ans=max(ans,lsum2[i-1]+lsum1[n]-lsum1[i]+(opt-Query(i-1))*node[i].w);
		}
		else {
			int l=1,r=i-1;int pos=-1;
			while(l<=r) {
				int mid=(l+r)>>1;
				if(opt>=Query(mid)) {
					pos=mid;
					l=mid+1;
				}
				else {
					r=mid-1;
				}
			}
			if(pos==-1) {
				ans=max(ans,lsum1[n]-node[i].l*node[i].w+opt*node[1].w);
			}
			else {
//				if(pos>=i) {
//					ans=max(ans,lsum2[i-1]+lsum1[n]-lsum1[i]+(opt-Query(i-1))*node[i].w);
//					ans=max(ans,lsum2[pos-1]-node[i].r*node[i].w+lsum1[n]-lsum1[pos]+(opt-Query(pos-1))*node[pos].w);
//				}
				ans=max(ans,lsum2[pos-1]+lsum1[n]-lsum1[pos-1]-node[i].l*node[i].w+(opt-Query(pos-1))*node[pos].w);
			}
		}
//		cout<<i<<" "<<ans<<endl;
	}
	cout<<ans<<endl;
	return 0;
}

详细

Test #1:

score: 100
Accepted
time: 1ms
memory: 7732kb

input:

5 17
2 3 4
6 1 5
8 2 4
4 3 3
7 5 5

output:

109

result:

ok single line: '109'

Test #2:

score: 0
Accepted
time: 0ms
memory: 9704kb

input:

12 62
503792 9 10
607358 1 3
600501 10 10
33249 4 4
774438 6 6
197692 3 6
495807 8 8
790225 5 9
77272 3 8
494819 4 9
894779 3 9
306279 5 6

output:

35204500

result:

ok single line: '35204500'

Test #3:

score: 0
Accepted
time: 1ms
memory: 9836kb

input:

15 32
835418 2 3
178262 1 3
527643 2 2
519710 1 1
774544 3 3
82312 1 1
808199 1 1
809396 1 3
255882 1 3
80467 1 3
874973 1 3
813965 1 2
198275 1 2
152356 1 3
802055 1 1

output:

22000255

result:

ok single line: '22000255'

Test #4:

score: 0
Accepted
time: 0ms
memory: 7768kb

input:

13 20
526447 1 1
807398 2 2
4167 1 2
944031 2 2
830685 2 2
394251 1 2
505011 1 2
968848 1 1
58170 1 3
32504 1 1
792273 3 3
196120 1 2
714507 1 1

output:

12878768

result:

ok single line: '12878768'

Test #5:

score: 0
Accepted
time: 0ms
memory: 9708kb

input:

13 32
582584 1 3
335440 3 3
971984 1 2
864169 1 2
528515 1 1
382399 1 2
459855 1 2
406909 2 3
66780 2 3
885118 3 3
434844 1 2
93331 1 3
502509 1 3

output:

22065034

result:

ok single line: '22065034'

Test #6:

score: 0
Accepted
time: 1ms
memory: 9708kb

input:

12 77
30244 1 7
518214 3 8
486001 8 9
152634 2 3
180255 3 4
791887 1 6
635820 2 9
881171 3 5
337905 3 8
683182 5 5
300786 3 6
339094 7 9

output:

50453764

result:

ok single line: '50453764'

Test #7:

score: -100
Wrong Answer
time: 1ms
memory: 9820kb

input:

10 3923726
826284 215861 638800
471693 146746 886003
140800 532315 684546
673434 604071 814259
170671 299465 525449
104262 689547 855391
215333 591975 803421
795321 31606 984783
103838 361911 601318
145693 450227 686945

output:

1605990455177

result:

wrong answer 1st lines differ - expected: '1597735409747', found: '1605990455177'