【题解】P3527 [POI 2011] MET-Meteors

news/2025/2/6 19:48:23/文章来源:https://www.cnblogs.com/sadlin/p/18701597

分治或者叫整体二分。

对于分治的每一次将国家向左或向右分成两部分,因为要求的是个最小前缀,所有左半部分的陨石不满足就将这个国家分到有半部分,满足就说明在左半部分的某处。

#include <bits/stdc++.h>
#define ll long long
#define int ll
#define ls a[p].l
#define rs a[p].r 
#define re register 
#define pb push_back
#define pir pair<int,int>
#define f(a,x,i) for(int i=a;i<=x;i++)
#define fr(a,x,i) for(int i=a;i>=x;i--)
using namespace std;
const int N=3e5+10;
const int M=8e6+10;
const int mod=1e9+7;
mt19937 rnd(251);int n,m;
int ans[N];
int lim=1e18;vector<int> pos[N];
int p[N];struct BIT{int lb(int x){return (x&-x);}int t[N];void set(int x){for(;x<=m;x+=lb(x)) t[x]=0;}void update(int x,int k){for(;x<=m;x+=lb(x)) t[x]+=k,t[x]=min(t[x],lim);}	void add(int l,int r,int x){update(l,x);update(r+1,-x);}int query(int x){int sum=0;for(;x;x-=lb(x)) sum+=t[x],sum=min(sum,lim);return sum;}} bit;void solve(vector<int> &country,auto &range,int L,int R){if(L==R){for(int x:country){ans[x]=L;}return;}if(country.size()==0) return;int mid=(L+R)>>1;vector<tuple<int,int,int,int>> lrange,rrange;for(auto &[l,r,x,i]:range){if(i>mid){rrange.push_back({l,r,x,i});continue;}bit.add(l,r,x);lrange.push_back({l,r,x,i});}vector<int> countryl,countryr;for(auto &x:country){int sum=0;for(int y:pos[x]) sum+=bit.query(y),sum=min(sum,lim);if(sum>=p[x]) countryl.push_back(x);else countryr.push_back(x),p[x]-=sum;}for(auto &[l,r,x,i]:lrange){bit.set(l);bit.set(r+1);}solve(countryl,lrange,L,mid);solve(countryr,rrange,mid+1,R);
}signed main(){// freopen("a.in","r",stdin);// freopen("a.out","w",stdout);ios::sync_with_stdio(0);cin.tie(nullptr);   cin>>n>>m;for(int i=1;i<=m;i++){int x;cin>>x;pos[x].push_back(i);}for(int i=1;i<=n;i++){cin>>p[i];}int k;cin>>k;vector<tuple<int,int,int,int>> range;for(int i=1;i<=k;i++){int l,r,x;cin>>l>>r>>x;if(l<=r){range.push_back({l,r,x,i});}else{range.push_back({l,m,x,i});range.push_back({1,r,x,i});}}vector<int> country(n);iota(country.begin(),country.end(),1);solve(country,range,0,k+1);for(int i=1;i<=n;i++){if(ans[i]<=k){cout<<ans[i]<<"\n";}else{cout<<"NIE\n";}}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/879785.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《高效能人士的七个习惯》

情感账户 勇气和体谅 大石头 自传式回应、同理心倾听:用你的话反映他们的感受和意思,而不是去评论、去判断是否正确

高效能人士的七个习惯

情感账户 勇气和体谅 大石头 自传式回应、同理心倾听:用你的话反映他们的感受和意思,而不是去评论、去判断是否正确

新春“码”启 | Cocos 3D 微信小游戏(第5天):分包构建和上传发布(完美收官)

新春开发 Cocos 3D 微信小游戏计划的第 5 天,详细介绍了如何利用Cocos Creator开发并发布一款3D微信小游戏,包括游戏状态机的设计理念,和微信小游戏主包大小限制时的解决方案——分包策略。从游戏设计、开发、调试到最后成功发布的全过程,为想要进入微信小游戏开发领域的开…

爬虫随笔(一)

爬虫随笔,某牛前几天一直在看js逆向,现在分享一下本人近期学习记录首先分享一个网站,这个网站可以获得request所需要的header和cookie https://curlconverter.com/ 爬取网站就不挂了简单观察发现,该网站是滑动加载,我们可以在滑动加载时获得我们所需要的接口,发现两个链…

Flow-CLI 全新升级,轻松对接 Sonar 实现代码扫描和红线卡点

Flow-CLI 使用的典型场景如:自定义开发一个 Sonar 扫描步骤,以在流水中触发 Sonar 扫描,并以扫描结果作为红线卡点,以保证代码质量;对接三方自有审批平台,在发布前进行检查审批,审批通过才允许发布。场景介绍 Flow-CLI 是云效流水线 Flow 推出的一款命令行工具,帮助用户…

皮克定理

小蓝鸟的面积S=B/2+I-1

两步构建 AI 总结助手,实现智能文档摘要

本次解决方案将向您介绍,如何通过函数计算 FC 阿里云百炼平台搭建智能 AI 总结助手,实现高效的文本自动总结和信息提取。在信息极度丰富的当下,如何从海量且复杂的文件资料中筛选出关键内容,成为了不少企业和个人急需解决的问题。本次解决方案将向您介绍,如何通过函数计算…

自定义桌面——获取天气

最近天气时不时会降温,经常用手机查看天气,感觉好不方便,今天决定把天气的功能添加到“自定义桌面”来,为了免费获取天气数据,竟然花了差不多一天的时间来制作完成。(假如一天人工费几百来算,这样真的值得吗?非常值得!为未来完善功能添砖加瓦打好基础!) 添加天气的功…

2.6 第三张评估表搭建

今天完成了作业中第三张能力评估表的搭建 html界面(部分)如下:以下是前端代码(部分): <body> <h1 style="text-align: center">能力评估</h1> <div id="root" style="border: 1px solid black"><form id="…

V-Control 开箱即用的.NET MAUI组件库发布了!

之前写过挺多的MAUI Sample,其中有很多代码可以打包成组件,当组件完善到一定程度,我会把控件封装起来放到控件库中。 今天,在这个仓库建立一年零八个月后,我觉得可以考虑将其作为开源库发布。 有很多网友在观望.NET MAUI,犹豫是否可以拿来作为有生产力的跨平台移动端开发…

国产直升机发展现状及思考

​由于独特的自然环境条件以及当前经济社会发展情况,比较世界上其他发达国家,直升机早已渗入中国城乡建设与经济社会活动的各个环节,例如农林工作、地质勘探、旅游观光、飞机驾驶训练等,直升机对国民经济工程建设起到了重要的作用。 按照我国航空工业技术研究机构的预计,截…

做题随笔:P10451

Solution 题意 原题链接 定义二元关系 \(\text{S}\),其满足反对称性且不满足传递性。 现有互异元素 \(N(N \le 1000)\) 个,可以进行不多于 \(10000\) 次提问,每次提问可以得知两指定元素 \(a,b\) 的 \(a \, \text{S} \, b\) 结果。求序列 \(a_N\) 满足:对任意 \(x_i,x_{i+1…