题目链接


题目大意:

给你一个数字序列
就是每次查询一个区间问你这个区间中的数不能组合成的数的最小是多少?


解题思路:

1.首先我们知道假设这个区间里面没有1那么ans=1ans=1ans=1
2.对于区间里面的数
b1<b2<b3..<bnb_1<b_2<b_3..<b_nb1​<b2​<b3​..<bn​
sum[i]=∑i=1nb[i]sum[i]=\sum_{i=1}^nb[i]sum[i]=∑i=1n​b[i]
3.假如区间里面前iii个数(b1,2,3...i)(b_{1,2,3...i})(b1,2,3...i​)可以表示 [1,x][1,x][1,x]里面所有的数,那么接下来我们据要看是否可以表示出x+1x+1x+1,假如说bi+1>x+1b_{i+1}>x+1bi+1​>x+1的话那么无论它怎么和前面的数组合都是大过x+1x+1x+1那么答案就是x+1x+1x+1,假如bi+1<x+1b_{i+1}<x+1bi+1​<x+1因为前面是∈[1,x]那么就有x+1−bi+1这个数在里面就一定可以凑出x+1\in[1,x]那么就有x+1-b_{i+1}这个数在里面就一定可以凑出x+1∈[1,x]那么就有x+1−bi+1​这个数在里面就一定可以凑出x+1,那么对于是否可以凑出x+1x+1x+1实际上就是在所有小于x+1的bi之和是否超过bi所有小于x+1的b_i之和是否超过b_i所有小于x+1的bi​之和是否超过bi​
4.那么我们就可以暴力枚举 那个x+1x+1x+1,假如已经有[1,x]再来个x+1就可以表示的数会变成[1,2∗x+1]这个增长接近指数的那么就是近乎log级别的枚举是可以接受假如已经有[1,x]再来个x+1就可以表示的数会变成[1,2*x+1]这个增长接近指数的那么就是近乎log级别的枚举是可以接受假如已经有[1,x]再来个x+1就可以表示的数会变成[1,2∗x+1]这个增长接近指数的那么就是近乎log级别的枚举是可以接受。
5.对于询问某段区间里面小于某个值的和我们可以用主席树主席树主席树因为这个具有前缀和性质。


#include <bits/stdc++.h>
#define endl "\n"
using namespace std;
typedef long long ll;
const int maxn = 1e6 + 10;
const int INF = 0x3f3f3f3f;
typedef pair<int,int> PII;
struct BIT {int lson, rson;ll sum;
}tr[maxn * 40];
int idx;
vector<ll> lis;
int n, m;
ll num[maxn];
int root[maxn];int getid(ll x) {if(x >= lis[lis.size()-1]) return lis.size();return lower_bound(lis.begin(),lis.end(),x)-lis.begin();
}inline void insert(int &rt, int l, int r, int pos, int pre, int val) {rt = ++ idx;tr[rt] = tr[pre];   if(l == r) {tr[rt].sum += val;return;}int mid = (l + r) >> 1;if(pos <= mid) insert(tr[rt].lson,l,mid,pos,tr[pre].lson, val);else insert(tr[rt].rson,mid+1,r,pos,tr[pre].rson, val);tr[rt].sum = tr[tr[rt].lson].sum + tr[tr[rt].rson].sum;
}inline ll ask(int pos, int l, int r, int ltree, int rtree) { if(l == r) {return tr[rtree].sum - tr[ltree].sum;}int mid = (l + r) >> 1;if(pos <= mid) return ask(pos,l,mid,tr[ltree].lson,tr[rtree].lson);else return ask(pos,mid+1,r,tr[ltree].rson,tr[rtree].rson) + tr[tr[rtree].lson].sum - tr[tr[ltree].lson].sum;
}int main() {//.........................lis.push_back(-INF);scanf("%d %d",&n,&m);for(int i = 1; i <= n; ++ i) {scanf("%lld",&num[i]);lis.push_back(num[i]);}sort(lis.begin(),lis.end());lis.erase(unique(lis.begin(),lis.end()),lis.end());for(int i = 1; i <= n; ++ i) insert(root[i],1,n,getid(num[i]),root[i-1],num[i]);ll ans = 0;while(m --) {int l , r;scanf("%d %d",&l,&r);l = (l+ans)%n+1; r = (r+ans)%n+1;//坑点if(l > r) swap(l,r);ans = 0;while(1) {int p = getid(ans+1);//注意离散化之后求比ans+1小的数的下标if(lis[p] > ans + 1) p --;//如果不是向下取整if(!p) breakll t = ask(p,1,n,root[l-1],root[r]);if(t == ans) break;ans = t;}  printf("%lld\n",ans+1);ans += 1;}return 0;
}
/*
5 5
1 4 2 1 6
1 3
2 1
2 4
1 4
3 4
*/

主席树 ---- 2021 ICPC 昆明 M.Stone Games [主席树 + 暴力]相关推荐

  1. 第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(昆明) Stone Games

    Stone Games 主席树 Code1 #include<cstring> #include<iostream> #include<algorithm> usi ...

  2. 2021 ICPC 昆明(22-4-17) C L E | 第46届ICPC亚洲区域赛(昆明)

    ICPC 2021 昆明 传送门 补题计划 CLE, C - Cup of Water prob : 在0-V内随机取数灌满1升水的期望操作次数 idea1: 首先将题给的"在0-V内随机取 ...

  3. The 2021 ICPC Asia Regionals Online Contest (I)

    The 2021 ICPC Asia Regionals Online Contest (I) 写了一晚上,日- 文章目录 一. A Busiest Computing Nodes 二.D Edge ...

  4. 2021 ICPC 银川打铜记

    前言 2020 ICPC我们队之所以没有把名额用在20年的上海.南京.济南,是希望能多训练一段时间直接冲更好的成绩,上半年的第一站是昆明,本以为能在昆明就打到成绩,结果却一塌糊涂,被出的第二题类 L ...

  5. 2021 ICPC Southeastern Europe Regional Contest Werewolves(树上背包)

    2021 ICPC Southeastern Europe Regional Contest Werewolves(树上背包) 链接 题意:给出一个n个节点的树(n≤3000n\le3000n≤300 ...

  6. 2021 ICPC 南京 3.27训练赛

    2021 ICPC 南京 D - Paimon Sorting J - Xingqiu's Joke I - Cloud Retainer's Game 题目链接 D - Paimon Sorting ...

  7. 2021 ICPC Southeastern Europe Regional Contest(更新至六题)

    2021 ICPC Southeastern Europe Regional Contest A题签到 A. King of String Comparison 题意:给两个字符串,找出有多少对(l, ...

  8. 2021 ICPC全国邀请赛(西安)太原理工大学收获3枚奖牌

    2021 ICPC 国际大学生程序设计竞赛全国邀请赛,于2021年6月5-6日在西安西北工业大学举行. 这次比赛,太原理工大学共派出3个队伍参加比赛,获得2枚银牌1枚铜牌. 通过这个比赛,锻炼了队伍, ...

  9. icpc 昆明 A.AC

    icpc 昆明 A.AC 反悔贪心,跟[国家集训队]种树这题相似. 假设下标从1 到 n 定义所需修改次数a[i], 表示将第i位和第i + 1位改为ac需要更改几次 如果s[i] = 'a', s[ ...

最新文章

  1. 谷歌这波大动作,暴露了什么信号?
  2. 一文学懂Java泛型,详细而全面,值得收藏~
  3. es python demo
  4. boost::geometry::model::point用法的测试程序
  5. 微服务、容器和Kubernetes的2020你怎么看?
  6. 小数据量计算最大lyapunov代码_Software | 计算Lyapunov指数的GUI工具箱及函数包汇总...
  7. 系统调用被信号打断的例子
  8. 隐马尔科夫模型,第三种问题解法,维比特算法(biterbi) algorithm python代码
  9. 【体系结构】共享SQL的理解
  10. 计算机网络各章节知识点总结
  11. WinSock IO模型五: 完成端口
  12. 音频(一)时域图、 频谱图 Spectrum
  13. 我国历史上各个朝代的都城
  14. 3个方法恢复彻底删除的苹果手机视频!
  15. asp.net使用Aspose.Cells实现excel预览
  16. C++ fabs和abs区别
  17. LSH 近似最近邻查找
  18. php artisan code,源码解读 Laravel PHP artisan config:cache
  19. 如何使用网易邮箱大师登录网易企业邮箱?
  20. window.event.keyCode - 兼容chrom和Firefox

热门文章

  1. 爬虫-selenium初步学习与使用!
  2. 2011-2012年《软件工程》本科期末试卷
  3. python实例,python网络爬虫爬取大学排名!
  4. 基于 OpenCV 和 OpenPose 的棒球挥杆人体姿势估计
  5. 使用计算机视觉在钢铁平面上检测焊接缺陷
  6. 基于OpenCV的实时睡意检测系统
  7. 用 PHP 调用 MySQL 存储过程
  8. R:关系型数据库管理
  9. Unity热门插件推荐
  10. DB2 XQuery学习笔记