Training 1.19

学习内容:每日一题补题

1.金发姑娘和n头牛(Acwing1952)

差分+离散化

用map的方法:

map<int,int>s;
for(int i=0;i<n;i++){
    scanf("%d%d",&l,&r);
    s[l]+=x;
    s[r]-=x;
}
for(auto& [k,v]:s){
    ans+=v;
    进行一些其他操作
}

手写离散化:

vector<int>s;
int l[maxn],r[maxn],p[maxn];
for(int i=0;i<n;i++){
	scanf("%d%d",&l[i],&r[i]);
	s.pb(l[i]),s.pb(r[i]+1);
}
sort(s.begin(),s.end());
s.erase(unique(s.begin(),s.end()),s.end());
for(int i=0;i<n;i++){
	int a=lower_bound(s.begin(),s.end(),l[i])-s.begin();
	int b=lower_bound(s.begin(),s.end(),r[i]+1)-s.begin();
    p[a]+=x;
    p[b]-=x;
    //这里可以进行一些奇奇怪怪的其他操作
}
for(int i=0;i<s.size();i++){
    //计算答案
}

2.Multiply and Rotate(abc235D)

包含状态转移的也要考虑DAG求最短路

本道题由于最多数据范围到1e6,我们可以用bfs求最短路,即用一个队列,对每个数,将其能转移的数push进去(如果没有访问过),这样在边建图的过程中就边求最短路了

3.双指针效率比二分高,一般用于数组有序且寻找满足某类条件的数个数的题中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值