AcWing 1952. 金发姑娘和 N 头牛(离散化+差分)
Posted MangataTS
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AcWing 1952. 金发姑娘和 N 头牛(离散化+差分)相关的知识,希望对你有一定的参考价值。
题目链接
https://www.acwing.com/problem/content/description/1954/
思路
因为对于每一个牛牛来说都有三个不同的舒适度区间,那么我们最终要求的一个最佳总舒适度点也可以看作一个区间,然后将三部分区间在map上面维护一个离散化的差分数组最后求一个前缀和的最大值即可,这里对于最左边的区间和最右边的区间我们可以定义一个INF=0x3f3f3f3f
来表示维护
代码
#include<bits/stdc++.h>
using namespace std;
//----------------自定义部分----------------
#define ll long long
#define mod 1000000007
#define endl "\\n"
#define PII pair<int,int>
int dx[4]=0,-1,0,1,dy[4]=-1,0,1,0;
ll ksm(ll a,ll b)
ll ans = 1;
for(;b;b>>=1LL)
if(b & 1) ans = ans * a % mod;
a = a * a % mod;
return ans;
ll lowbit(ll x)return -x & x;
const int N = 2e6+10;
//----------------自定义部分----------------
ll n,m,q,a[N],b[N],x,y,z;
map<ll,ll> d;
const int INF = 0x3f3f3f3f;
void slove()
for(int i = 1;i <= n; ++i)
d[-INF] += x;
d[a[i]] -= x;
d[a[i]] += y;
d[b[i] + 1] -= y;
d[b[i] + 1] += z;
d[INF+1] -= z;
ll ans = 0;
ll res = 0;
for(auto it : d)
// cout<<it.first<<" "<<it.second<<endl;
res += it.second;
ans = max(res,ans);
cout<<ans<<endl;
int main()
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cout.tie(nullptr);
cin>>n>>x>>y>>z;
for(int i = 1;i <= n; ++i)
cin>>a[i]>>b[i];
slove();
return 0;
以上是关于AcWing 1952. 金发姑娘和 N 头牛(离散化+差分)的主要内容,如果未能解决你的问题,请参考以下文章