首页 > 其他分享 >暑假集训csp提高模拟16

暑假集训csp提高模拟16

时间:2024-08-08 15:39:00浏览次数:6  
标签:cnt right 16 int tot csp using 集训 left

赛时 rank 38,T1 20,T2 50,T3 0,T4 0

T2 挂分原因 : 莫队n,m写反了,但样例中这俩一样,遂寄

T1 九次九日九重色

\[\color{Green}{\Huge{!!!!!!!!!九日\,!!!!!!!!!}} \]

\[\color{Red}{\Huge{!!!!!!!!!九日\,!!!!!!!!!}} \]

\[\color{Blue}{\Huge{!!!!!!!!!九日\,!!!!!!!!!}} \]

\[\color{Yellow}{\Huge{!!!!!!!!!九日\,!!!!!!!!!}} \]

\[\color{Pink}{\Huge{!!!!!!!!!九日\,!!!!!!!!!}} \]

\[\color{Orange}{\Huge{!!!!!!!!!九日\,!!!!!!!!!}} \]

\[\color{Purple}{\Huge{!!!!!!!!!九日\,!!!!!!!!!}} \]

\[\color{#66CCFF}{\Huge{!!!!!!!!!九日\,!!!!!!!!!}} \]

\[\color{Brown}{\Huge{!!!!!!!!!九日\,!!!!!!!!!}} \]

不用数了正好九个

玩galgame有啥意思不如玩我们nine suns

调和级数预处理出每个数的倍数,时间复杂度\(O(n\log n)\)

然后就是求一个在二维平面上的最长上升子序列

点此查看代码
#include<bits/stdc++.h>
#include<bits/extc++.h>
// using namespace __gnu_pbds;
// using namespace __gnu_cxx;
using namespace std;
#define infile(x) freopen(x,"r",stdin)
#define outfile(x) freopen(x,"w",stdout)
#define errfile(x) freopen(x,"w",stderr)
#ifdef LOCAL
    FILE *InFile = infile("in.in"),*OutFile = outfile("out.out");
    // FILE *ErrFile=errfile("err.err");
#else
    FILE *Infile = stdin,*OutFile = stdout;
    //FILE *ErrFile = stderr;
#endif
using ll=long long;using ull=unsigned long long;
using db = double;using ldb = long double;
const int N = 2e5 + 10;
int n,a[N],b[N],sum[N];
vector<int> can[N];
inline void pre_work(){
    for(int i = 1;i <= n; ++i){
        for(int j = i;j <= n;j += i){
            can[i].push_back(j);
        }
    }
}
int ans = 0;
class BIT{
private:
    int tree[N];
    #define lowbit(x) (x&(-x))
public:
    int mx = 0;
    inline void update(int pos,int val){
        for(int i = pos;i <= mx;i += lowbit(i)) tree[i] = max(val,tree[i]);
    }
    inline int query(int pos){
        int res = 0;
        for(int i = pos; i;i -= lowbit(i)) res = max(tree[i],res);
        return res;
    }
}T;
int posa[N],posb[N];
inline void solve(){
    cin>>n;
    for(int i = 1;i <= n; ++i) cin>>a[i],posa[a[i]] = i;
    for(int i = 1;i <= n; ++i) cin>>b[i],posb[b[i]] = i;
    pre_work();T.mx = n;
    for(int i = 1;i <= n; ++i){
        vector<pair<int,int> > p;
        for(auto j : can[a[i]]){
            p.push_back(make_pair(posb[j],T.query(posb[j]-1)+1));
        }
        for(auto j : p) T.update(j.first,j.second);
    }
    for(int i = 1;i <= n; ++i) ans = max(ans,T.query(i));
    cout<<ans;
}
signed main(){
    cin.tie(nullptr)->sync_with_stdio(false);
    cout.tie(nullptr)->sync_with_stdio(false);
    solve();
}

T2 天色天歌天籁音

大爷的字符串题

是道莫队水题

先离散化

记录一下一个数出现的次数和所有数出现次数的出现次数即可

可能有点离谱。

就随便拿个样例说一下

1 2 3 4 4 5 6

如上,我们要求\(l = 2,r = 6\)

那么\(cnt_1 = 0,cnt_2 = 1,cnt_3 = 1,cnt_4 = 2,cnt_5 = 1,cnt_6 = 1\)

还有\(tot_0 = 1,tot_1 = 4,tot_2 = 1,tot_3 = tot_4 = tot_5 = tot_6 = 0\)

如果从\(l=2,r=6\)转移到\(l=2,r=3\)

当右指针从5移动到4时,那么就有\(cnt_4=1\),那么\(tot_2=1\)

我们发现,每次转移,答案至多会更改1

若最大的出现次数减没,则最优答案就是最大次数减一,若有更大的,更新。

点此查看代码
#include<bits/stdc++.h>
#include<bits/extc++.h>
// using namespace __gnu_pbds;
// using namespace __gnu_cxx;
using namespace std;
#define infile(x) freopen(x,"r",stdin)
#define outfile(x) freopen(x,"w",stdout)
#define errfile(x) freopen(x,"w",stderr)
#ifdef LOCAL
    FILE *InFile = infile("in.in"),*OutFile = outfile("out.out");
    // FILE *ErrFile=errfile("err.err");
#else
    FILE *Infile = stdin,*OutFile = stdout;
    //FILE *ErrFile = stderr;
#endif
using ll=long long;using ull=unsigned long long;
using db = double;using ldb = long double;
const int N = 2e5 + 10;
int n,m,a[N],pos[N],L[N],R[N],len,ans[N];
vector<int> num;
struct Query{int id,l,r;}q[N];
int cnt[N],tot[N];
inline void solve(){
    cin>>n>>m;
    for(int i = 1;i <= n; ++i) cin>>a[i],num.emplace_back(a[i]);
    sort(num.begin(),num.end());
    num.erase(unique(num.begin(),num.end()),num.end());
    for(int i = 1;i <= n; ++i)
        a[i] = lower_bound(num.begin(),num.end(),a[i])-num.begin()+1;
    len = sqrt(n);
    for(int i = 1;i <= len; ++i) L[i] = R[i - 1] + 1,R[i] = i * len;
    if(R[len] < n) R[len] = n;
    for(int i = 1;i <= len; ++i) for(int j = L[i];j <= R[i]; ++j) pos[j] = i;
    for(int i = 1;i <= m; ++i) cin>>q[i].l>>q[i].r,q[i].id = i;
    sort(q+1,q+1+m,[](Query x,Query y){return pos[x.l] == pos[y.l]?(pos[x.l]&1?x.r>y.r:x.r<y.r):x.l<y.l;});
    int left = 1,right = 0,res = 0;
    tot[0] = num.size();
    for(int i = 1;i <= m; ++i){
        int l = q[i].l,r = q[i].r;
        while(left < l){
            if(cnt[a[left]] >= 0) tot[cnt[a[left]]]--;
            if(cnt[a[left]] > 0) tot[cnt[a[left]]-1]++;
            if(res == cnt[a[left]] && !tot[cnt[a[left]]]) res--;
            cnt[a[left]]--;
            left++;
        }
        while(right < r){
            right++;
            if(cnt[a[right]] >= 0) tot[cnt[a[right]]]--;
            cnt[a[right]]++;
            if(cnt[a[right]] >= 0) tot[cnt[a[right]]]++;
            res = max(res,cnt[a[right]]);
        }
        while(left > l){
            left--;
            if(cnt[a[left]]) tot[cnt[a[left]]]--;
            cnt[a[left]]++;
            tot[cnt[a[left]]]++;
            res = max(res,cnt[a[left]]);
        }
        while(right > r){
            if(cnt[a[right]]) tot[cnt[a[right]]]--;
            if(cnt[a[right]] > 0) tot[cnt[a[right]]-1]++;
            if(res == cnt[a[right]] && !tot[cnt[a[right]]]) res--;
            cnt[a[right]]--;
            right--;
        }
        ans[q[i].id] = res;
    }
    for(int i = 1;i <= m; ++i) cout<<-ans[i]<<'\n';
}
signed main(){
    cin.tie(nullptr)->sync_with_stdio(false);
    cout.tie(nullptr)->sync_with_stdio(false);
    solve();
}

T3 春色春恋春熙风

Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths

Dsu On Tree

今天学这个,T4不改了

T4 雪色雪花雪余痕

标签:cnt,right,16,int,tot,csp,using,集训,left
From: https://www.cnblogs.com/hzoi-Cu/p/18349067

相关文章

  • 「模拟赛」暑期集训CSP提高模拟15(8.7)
    赛时记录:开场看T1,一眼\(manacher\)求子串回文串,听课是听了,但是不会啊。跳了。看T2,发现结论题,推了会结论打上走了。打完T2想了会T3、T4,无思路,回来打了T1暴力和特殊性质,\(30pts\),又去想T3,还是不会,这时还剩一个小时。不行,现在才\(130pts\),包打祭的啊,能不能翻盘看我T1......
  • 暑假集训CSP提高模拟16
    暑假集训CSP提高模拟16组题人:@Muel_imj\(T1\)P216.九次九日九重色\(100pts\)部分分\(30pts\):设\(f_{i,j}\)表示当前处理到\(P\)的第\(i\)位,\(Q\)的第\(j\)位时最大的\(k\),状态转移方程为\(f_{i,j}=\begin{cases}\max(f_{i,j-1},f_{i-1,j})&p_{i}\nmid......
  • SublimeText 4.4169 中文授权版
    SublimeText是编辑器中的一款神级IDE,非常有名,虽然比较轻量,但是呢软件拓展性非常强大,适用于多种编程语言,当然,当一个编辑器,也是非常不错的。SublimeText支持但不限于C,C++,C#,CSS,D,Erlang,HTML,Groovy,Haskell,HTML,Java,JavaScript,LaTeX,Lisp,Lua,Markdown,......
  • [CSP-J 2023] 小苹果
    [CSP-J2023]小苹果【官方数据】题目描述小Y的桌子上放着 nn 个苹果从左到右排成一列,编号为从 11 到 nn。小苞是小Y的好朋友,每天她都会从中拿走一些苹果。每天在拿的时候,小苞都是从左侧第 11 个苹果开始、每隔 22 个苹果拿走 11 个苹果。随后小苞会将剩下......
  • [CSP-S 2023] 密码锁
    题目描述小Y有一把五个拨圈的密码锁。如图所示,每个拨圈上是从 00 到 99 的数字。每个拨圈都是从 00 到 99 的循环,即 99 拨动一个位置后可以变成 00 或 88,因为校园里比较安全,小Y采用的锁车方式是:从正确密码开始,随机转动密码锁仅一次;每次都是以某个幅度仅转......
  • 169.254.x.x是什么地址
    ‌APIPA169.254.x.x地址是一个特殊的IP地址范围,被称为“APIPA”(AutomaticPrivateIPAddressing)地址,主要用于在网络通信设置不当时确保最基本的计算机网络连接性。这种地址是由操作系统自动分配给计算机的私有IP地址,当计算机无法通过‌DHCP(动态主机配置协议)服务......
  • 预训练大语言模型综述来了!中国人民大学教授发表包含了416个参考文献的大语言模型综述
    尽管大语言模型在最近今年发展十分迅速,但是相关的综述却相对比较落后。本文是由中国人民大学教授WayneXinZhao等人前几天刚公开的关于大语言模型的综述,论文正文部分共32页,包含了416个参考文献。内容十分详实。这份大模型综述我已经打包好了,还有完整版的大模型AI学习资......
  • 【题解】Solution Set - NOIP2024集训Day2 线段树
    【题解】SolutionSet-NOIP2024集训Day2线段树https://www.becoder.com.cn/contest/5431「CF1149C」TreeGenerator™结论:对于括号序列的一个子段,删去所有的匹配括号之后,剩下的不匹配的括号,按顺序构成树上的一条路径。Why?从括号序列的构造出发。每次(相当于开始遍历......
  • Xcode16升级后,如何直接安装iOS 18 Simulator
    热烈欢迎,请直接点击!!!进入博主AppStore主页,下载使用各个作品!!!注:博主将坚持每月上线一个新app!! 苹果官方下载链接:【操作系统OperatingSystems】:https://developer.apple.com/download/【应用Applications】:https://developer.apple.com/download/applications/【描述文件Pr......
  • 【愚公系列】《微信小程序开发解析》016-位置API
    ......