找回密码
 立即注册
首页 业界区 科技 AT_abc405

AT_abc405

颓哀 前天 10:16
这场比较水了。
A.Is it rated?

手速题,题面大白话照着干就行。
首杀 32s,遥不可及啊。
(嗯这个屑翻译先看一分钟)
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int r,x;
  4. int main(){
  5.         cin>>r>>x;
  6.         if(x==1){
  7.                 if(1600<=r&&r<=2999)cout<<"Yes";
  8.                 else cout<<"No";
  9.         }
  10.         else if(1200<=r&&r<=2399)cout<<"Yes";
  11.         else cout<<"No";
  12. }
复制代码
G.Range Shuffle Query

首先有序列重排数量 \(=\frac{|A|!}{\prod_{x\in A}cnt[x]}\)。
所以我们要维护的:\(cnt\) 前缀和,\(cnt\) 各项阶乘逆元的前缀积(令 \(0!=1\))
看起来也很可以莫队。于是写了一发树状数组+莫队 \(O(N\sqrt{N}\log N)\),不出意料地没过。
莫队是不变的了,考虑干掉 \(\log\),所以我们需要一个 \(O(1)\) 修改的东西。
容易想到对值域分块,\(O(1)\) 修 \(O(\sqrt{N})\) 查,很平衡,然后就过了。
[code]#includeusing namespace std;#define int long longconst int mod=998244353,B=500;int n,Q,a[250005],l,r,x;struct node{        int l,r,x,id;        bool operator < (const node & b) const {                if(l/B!=b.l/B)return lb.r;                return r>Q;        fac[0]=ifac[0]=inv[0]=inv[1]=1;        for(int i=0;ia;fac=fac[i-1]*i%mod;                if(i>1)inv=mod-mod/i*inv[mod%i]%mod;                ifac=ifac[i-1]*inv%mod;        }        for(int i=1;i>l>>r>>x;                q={l,r,x,i};        }        sort(q+1,q+Q+1);        for(int i=1,l=1,r=0;iq.l)add(a[--l]);                while(r
您需要登录后才可以回帖 登录 | 立即注册