当前位置: 首页 > news >正文

20250913 NFLS 模拟赛 部分题目

图片
图片

简单倍增

#include <bits/stdc++.h>
using namespace std;
using ll = long long;int main() {freopen("fountain.in","r",stdin);freopen("fountain.out","w",stdout);ios::sync_with_stdio(false);cin.tie(nullptr);int n, q;cin>>n>>q;vector<int> d(n + 1), c(n + 1);for (int i = 1; i <= n; ++i) cin >> d[i] >> c[i];vector<int> nxt(n + 1, 0);{vector<int> st;for (int i = n; i >= 1; --i) {while (!st.empty() && d[st.back()] <= d[i]) st.pop_back();nxt[i] = st.empty() ? 0 : st.back();st.push_back(i);}}const int LOG = 18;vector<vector<int>> up(LOG, vector<int>(n + 1, 0));vector<vector<ll>> sum(LOG, vector<ll>(n + 1, 0));for (int i = 1; i <= n; ++i) {up[0][i] = nxt[i];sum[0][i] = c[i]; }for (int k = 1; k < LOG; ++k) {for (int i = 1; i <= n; ++i) {int mid = up[k - 1][i];if (mid == 0) {up[k][i] = 0;sum[k][i] = sum[k - 1][i];} else {up[k][i] = up[k - 1][mid];sum[k][i] = sum[k - 1][i] + sum[k - 1][mid];}}}while (q--) {int r;ll v;cin >> r >> v;int cur = r;ll acc = 0;for (int k = LOG - 1; k >= 0; --k) {if (cur == 0) break;if (up[k][cur] != 0 && acc + sum[k][cur] < v) {acc += sum[k][cur];cur = up[k][cur];}}if (acc + c[cur] >= v) {cout << cur << '\n';} else {cout << 0 << '\n';}}return 0;
}

图片

限制A和C反转一下,三维偏序板子,但是场上过不了。

我懒得写,扔一个题解

图片


然后直接CDQ 是log^2的

点击查看代码
#include<bits/stdc++.h>
using namespace std;
//#define int long long struct Node{int a, b, c;int type, id, val;
};char buf[200000],*p1,*p2;
#define getchar() (((p1==p2)&&(p2=(p1=buf)+fread(buf,1,200000,stdin))),*p1++)
int rd(){int s=0; static char c;while(c=getchar(),c<48);do s=s*10+c-48;while(c=getchar(),c>47);return s;
}struct BIT{int n;vector<int> t;BIT(int _n = 0){init(_n);}void init(int _n){n = _n;t.assign(n+1,0);}void add(int i,int v){for(;i <= n;i += i & -i) t[i] += v;}int sum(int i){int res = 0;for(;i > 0;i -= i & -i)res += t[i];return res;}
};vector<Node> e, tmp;
vector<int> ans;
BIT bit;void cdq(int l,int r){if(l >= r) return;int mid = (l + r) >> 1;cdq(l,mid),cdq(mid+1,r);int i = l,j = mid+1,k = l;while(i <= mid && j <= r){if(e[i].b <= e[j].b){if(e[i].type == 0){bit.add(e[i].c,e[i].val);//1}tmp[k++] = e[i++];}else{if(e[j].type == 1){ans[e[j].id] += bit.sum(e[j].c);}tmp[k++] = e[j++];}}while(i <= mid){if(e[i].type == 0) bit.add(e[i].c,e[i].val);tmp[k++] = e[i++];}while(j <= r){if(e[j].type == 1) ans[e[j].id] += bit.sum(e[j].c);tmp[k++] = e[j++];}for(int p = l;p <= mid;p++){if(e[p].type == 0) bit.add(e[p].c,-e[p].val);}for(int p = l;p <= r;p++) e[p] = tmp[p];
}signed main(){//ios::sync_with_stdio(0);//cin.tie(0);freopen("original.in","r",stdin);freopen("original.out","w",stdout);int n, q;n = rd(),q = rd();e.reserve(n+q);vector<int> cs;cs.reserve(n+q);for(int i = 0;i < n;i++){int l, r;l = rd(),r = rd();int len = r - l;Node nd;nd.a = -len,nd.b = r,nd.c = -l,nd.type = 0,nd.id = -1,nd.val = 1;e.push_back(nd);cs.push_back(nd.c);}ans.assign(q,0);for(int i = 0;i < q;i++){int l,r,k;l = rd(),r = rd(),k = rd();Node nd;nd.a = -k,nd.b = r,nd.c = -l;nd.type = 1,nd.id = i,nd.val = 0;e.push_back(nd);cs.push_back(nd.c);}sort(cs.begin(),cs.end());cs.erase(unique(cs.begin(),cs.end()),cs.end());for(auto &nd : e){nd.c = (int)(lower_bound(cs.begin(),cs.end(),nd.c) - cs.begin() + 1);}sort(e.begin(),e.end(),[](const Node &x,const Node &y){if(x.a != y.a)return x.a < y.a;return x.type < y.type;});int m = e.size();tmp.reserve(m);bit.init(cs.size()+1);cdq(0,m-1);for(int i = 0;i < q;i++) cout<<ans[i]<<"\n";return 0;
}

图片
图片

发现gcd固定一个端点后,另一个端点这个区间,最多6个本质不同GCD。

并且你考虑一个数字x,左面区间l,curx-1,右面区间curx+1,r,其中左面区间l再从curx-1到1的过程中,gcd至多跌落6次。

并且有一个结论,如果你要修改数字x,x一定是curx-1的数字的一个质因子乘以curx+1的一个质因子。

质因子本质不同6个。

所以直接枚举36个数,Pl * Pr即可,考虑如何算,对于每个数,维护集合GCDL(val,valpos),然后遍历一下,看看这个质因子在哪个pos死掉即可。


和GCDR


http://www.wxhsa.cn/company.asp?id=3045

相关文章:

  • 帐号内容定位
  • 基于YOLOv8的茶叶病害识别项目|完整源码数据集+图形化界面+训练教程
  • 2025第三届“陇剑杯”网络安全大赛初赛-夺旗闯关赛wp
  • 《Python数据结构与算法分析》第二弹《2.2.2 异序词检测示例》
  • 深入解析:柱状图(Vue3)
  • 计算机毕业设计springboot基于微信小程序的手机点餐软件 基于Spring Boot框架的微信小程序点餐体系设计与实现 微信小脚本点餐应用开发:Spring Boot技术的应用
  • 二叉树的相关知识
  • 原假设的选择准则:总损失视角的假设检验
  • dfs序基础+树上差分
  • Python中的if __name__ == __main__是什么?
  • 钻石
  • 随机游走理解
  • 【基于协同过滤的校园二手交易强大的平台】
  • Neural ODE原理与PyTorch实现:深度学习模型的自适应深度调节
  • PKU_Compiler
  • lc1026-节点与其祖先之间的最大差值
  • 如何绕过谷歌反爬策略爬取搜索结果
  • 求细胞数量
  • [SSL]
  • Rust 生命周期详解 - 实践
  • 笔记《机器人动力学理论及其应用》上交桂凯博士-中科深谷机器人大讲堂第10期
  • [豪の学习笔记] 软考中级备考 基础复习#9
  • Shiro概述 - 详解
  • 2025CCPC南昌邀请赛游记
  • 双因素认证暴力破解绕过技术解析(2023更新版)
  • 文本三剑客
  • 软件工程第二次作业-个人项目
  • Git 分支
  • 用 Go 打造一个服务器资源指标采集器:结合 Prometheus Exporter 实战
  • 2025年API安全建设方案最佳实践:七步五方法