训练记录番外篇(2):2022 ICPC Gran Premio de Mexico 2da Fecha

这篇具有很好参考价值的文章主要介绍了训练记录番外篇(2):2022 ICPC Gran Premio de Mexico 2da Fecha。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

2022 ICPC Gran Premio de Mexico 2da Fecha

2022.10.3
之前训得ak场,个人认为很edu。
(顺便一提,可能这个训练记录番外系列的比赛都非常edu,十分建议铜银选手单挑)

训练记录番外篇(2):2022 ICPC Gran Premio de Mexico 2da Fecha

A. Advanced Player Setup

题意比较晦涩难懂,但是读完发现是个toposort。

#include <bits/stdc++.h>
#define int long long
#define endl '\n'
#define lowbit(x) (x&(-x))
#define ull unsigned long long 
#define pii pair<int,int>
using namespace std;
const string yes="Yes\n",no="No\n";
const int N = 100005,inf = 2e18,mod=1000000007;
int qpow(int x,int y=mod-2,int mo=mod,int res=1){
    for(;y;(x*=x)%=mo,y>>=1)if(y&1)(res*=x)%=mo;
    return res;
}
int jie[500005],invjie[500005];
int C(int n,int m){return jie[n]*invjie[m]%mod*invjie[n-m]%mod;}
void main_init(){
    int n=500000;jie[0]=1;for(int i=1;i<=n;i++)jie[i]=jie[i-1]*i%mod;
    invjie[n]=qpow(jie[n]);for(int i=n-1;~i;i--)invjie[i]=invjie[i+1]*(i+1)%mod;
}
int n,m,k;
int ans;
int dis[200005],cost[200005];
int vis[200005],sz[100005];
vector<pii>p[200005];
int dp[1005],need[100005];
void topsort(int st){
    queue<int>q;
    dis[st]=1;
    q.push(st);
    while(q.size()){
        int u=q.front();q.pop();
        for(auto [v,w]:p[u]){
            if(v==1)continue;
            dis[v]=min(dis[v]+dis[u]+w,1000ll);
            sz[v]++;
            if(sz[v]==need[v]){
                q.push(v);
            }
        }
    }
    for(int i=1;i<=n;i++){
        if(dis[i]==0)dis[i]=inf;
    }
}
void solve(){
    cin>>n>>m>>k;
    for(int i=1;i<=m;i++){
        int u,v,w;cin>>u>>v>>w;
        p[u].push_back({v,w});
        need[v]++;
    }
    topsort(1);
    dp[0]=1;
    for(int i=1;i<=n;i++){
        for(int j=dis[i];j<=k;j++){
            (dp[j]+=dp[j-dis[i]])%=mod;
        }
    }
    for(int i=1;i<=k;i++){
        (ans+=dp[i])%=mod;
    }
    cout<<ans;
}
signed main(){
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    cout<<fixed<<setprecision(12);
    int t=1;
    main_init();
    while (t--)
		solve();
}

B. Binahuatls Prophecy

发现能够成为答案的点非常少,爆搜出所有可以成为答案的点然后直接二分即可。

#include <bits/stdc++.h>
#define int long long
#define endl '\n'
#define lowbit(x) (x&(-x))
#define ull unsigned long long 
#define pii pair<int,int>
using namespace std;
const string yes="Yes\n",no="No\n";
const int N = 100005,inf = 2e18,mod=1000000007;
int qpow(int x,int y=mod-2,int mo=mod,int res=1){
    for(;y;(x*=x)%=mo,y>>=1)if(y&1)(res*=x)%=mo;
    return res;
}
int jie[500005],invjie[500005];
int C(int n,int m){return jie[n]*invjie[m]%mod*invjie[n-m]%mod;}
vector<int>ans;
void main_init(){
    int n=500000;jie[0]=1;for(int i=1;i<=n;i++)jie[i]=jie[i-1]*i%mod;
    invjie[n]=qpow(jie[n]);for(int i=n-1;~i;i--)invjie[i]=invjie[i+1]*(i+1)%mod;
    for(int i=1;i<(1<<17);i++){
        int t=i,cnt=0,r=0;
        while(t){
            r=(r<<1)|(t%2);
            cnt++,t>>=1;
        }
        ans.push_back((i<<cnt)|(r));
        ans.push_back((i<<cnt-1)|(r));
    }
    sort(ans.begin(),ans.end());
}
void solve(){
    int l,r;cin>>l>>r;
    int rt=upper_bound(ans.begin(),ans.end(),r)-ans.begin();
    int lt=lower_bound(ans.begin(),ans.end(),l)-ans.begin();
    cout<<rt-lt<<endl;
}
signed main(){
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    cout<<fixed<<setprecision(12);
    int t=1;
    main_init();
    cin>>t;
    while (t--)
		solve();
}

C. Correcting School Enrollment Errors

小模拟题,锻炼码力+分类讨论能力。

#include <bits/stdc++.h>
#define int long long
#define endl '\n'
#define lowbit(x) (x&(-x))
#define ull unsigned long long 
#define pii pair<int,int>
using namespace std;
const string yes="Yes\n",no="No\n";
const int N = 100005,inf = 2e18,mod=1000000007;
int qpow(int x,int y=mod-2,int mo=mod,int res=1){
    for(;y;(x*=x)%=mo,y>>=1)if(y&1)(res*=x)%=mo;
    return res;
}
int jie[500005],invjie[500005];
int C(int n,int m){return jie[n]*invjie[m]%mod*invjie[n-m]%mod;}
void main_init(){
    int n=500000;jie[0]=1;for(int i=1;i<=n;i++)jie[i]=jie[i-1]*i%mod;
    invjie[n]=qpow(jie[n]);for(int i=n-1;~i;i--)invjie[i]=invjie[i+1]*(i+1)%mod;
}
int n,m,cnt;
vector<pii>p[200005];
map<int,int>mp;
set<int>st,q[200005];
set<pii>ans[200005];
int id[200005];
void solve(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        int o,k;cin>>o>>k;
        if(mp.find(o)==mp.end()){
            mp[o]=++cnt;
        }
        int d=mp[o];
        for(int j=1;j<=k;j++){
            int x;cin>>x;
            q[d].insert(x);
        }
    }
    for(int i=1;i<=m;i++){
        int o,k;cin>>o>>k;
        if(mp.find(o)==mp.end()){
            mp[o]=++cnt;
        }
        int d=mp[o];
        for(int j=1;j<=k;j++){
            int x;cin>>x;
            if(q[d].find(x)==q[d].end()){
                ans[d].insert({x,-1});//需要删除的
            }
            else{
                q[d].erase(x);
            }
        }
    }
    for(int i=1;i<=cnt;i++){
        for(auto &x:q[i]){
            ans[i].insert({x,1});//需要添加的
        }
    }
    int tot1=0,tot2=0,tot3=0;
    for(auto [x,i]:mp){
        if(ans[i].size()){
            tot1++;
            cout<<x<<" ";
            for(auto [y,z]:ans[i]){
                if(z>0){
                    cout<<"+";
                    tot3++;
                }
                else{
                    cout<<"-";
                    tot2++;
                }
                cout<<y<<" ";
            }
            cout<<endl;
        }
    }
    if(tot1==0){
        cout<<"GREAT WORK! NO MISTAKES FOUND!";
    }
    else{
        cout<<"MISTAKES IN "<<tot1<<" STUDENTS: "<<tot2<<" NOT REQUESTED, "<<tot3<<" MISSED";
    }
}
signed main(){
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    cout<<fixed<<setprecision(12);
    int t=1;
    main_init();
    //cin>>t;
    while (t--)
		solve();
}

D. District Capitalism Roads

BFS

#include <bits/stdc++.h>
#define int long long
#define endl '\n'
#define lowbit(x) (x&(-x))
#define ull unsigned long long 
#define pii pair<int,int>
using namespace std;
const string yes="Yes\n",no="No\n";
const int N = 100005,inf = 2e18,mod=1000000007;
int qpow(int x,int y=mod-2,int mo=mod,int res=1){
    for(;y;(x*=x)%=mo,y>>=1)if(y&1)(res*=x)%=mo;
    return res;
}
int jie[500005],invjie[500005];
int C(int n,int m){return jie[n]*invjie[m]%mod*invjie[n-m]%mod;}
void main_init(){
    int n=500000;jie[0]=1;for(int i=1;i<=n;i++)jie[i]=jie[i-1]*i%mod;
    invjie[n]=qpow(jie[n]);for(int i=n-1;~i;i--)invjie[i]=invjie[i+1]*(i+1)%mod;
}
int n,m;
int ans;
int dis[200005],cost[200005];
vector<pii>p[200005];
queue<int>q;
void bfs(int st){
    memset(dis,0x3f,sizeof dis);
    memset(cost,0x3f,sizeof cost);
    dis[st]=0;
    cost[st]=0;
    q.push(st);
    while(q.size()){
        int u=q.front();q.pop();
        for(auto [v,w]:p[u]){
            if(dis[v]>dis[u]+1){
                dis[v]=dis[u]+1;
                cost[v]=w;
                q.push(v);
            }
            else if(dis[v]==dis[u]+1){
                cost[v]=min(cost[v],w);
            }
        }
    }
}
void solve(){
    cin>>n>>m;
    for(int i=1;i<=m;i++){
        int u,v,w;
        cin>>u>>v>>w;
        p[u].push_back({v,w});
        p[v].push_back({u,w});
    }
    bfs(1);
    for(int i=1;i<=n;i++){
        ans+=dis[i]*cost[i];
    }
    cout<<ans;
}
signed main(){
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    cout<<fixed<<setprecision(12);
    int t=1;
    main_init();
    //cin>>t;
    while (t--)
		solve();
}

E. Express Warehouse Migration

签到

#include <bits/stdc++.h>
#define int long long
#define endl '\n'
#define lowbit(x) (x&(-x))
#define ull unsigned long long 
#define pii pair<int,int>
using namespace std;
const string yes="Yes\n",no="No\n";
const int N = 100005,inf = 2e18,mod=1000000007;
int qpow(int x,int y=mod-2,int mo=mod,int res=1){
    for(;y;(x*=x)%=mo,y>>=1)if(y&1)(res*=x)%=mo;
    return res;
}
int jie[500005],invjie[500005];
int C(int n,int m){return jie[n]*invjie[m]%mod*invjie[n-m]%mod;}
void main_init(){
    int n=500000;jie[0]=1;for(int i=1;i<=n;i++)jie[i]=jie[i-1]*i%mod;
    invjie[n]=qpow(jie[n]);for(int i=n-1;~i;i--)invjie[i]=invjie[i+1]*(i+1)%mod;
}
int n,m;
void solve(){
    cin>>n>>m;
    cout<<(n+m-1)/m;
}
signed main(){
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    cout<<fixed<<setprecision(12);
    int t=1;
    main_init();
    //cin>>t;
    while (t--)
		solve();
}

F. Famous Paintings

暴力。

#include <bits/stdc++.h>
#define int long long
#define endl '\n'
#define lowbit(x) (x&(-x))
#define ull unsigned long long 
#define pii pair<int,int>
using namespace std;
const string yes="Yes\n",no="No\n";
const int N = 100005,inf = 2e18,mod=1000000007;
int qpow(int x,int y=mod-2,int mo=mod,int res=1){
    for(;y;(x*=x)%=mo,y>>=1)if(y&1)(res*=x)%=mo;
    return res;
}
int jie[500005],invjie[500005];
int C(int n,int m){return jie[n]*invjie[m]%mod*invjie[n-m]%mod;}
void main_init(){
    int n=500000;jie[0]=1;for(int i=1;i<=n;i++)jie[i]=jie[i-1]*i%mod;
    invjie[n]=qpow(jie[n]);for(int i=n-1;~i;i--)invjie[i]=invjie[i+1]*(i+1)%mod;
}
int n,m;
int x[105],y[105];
int dp[2000005];
int ans;
void solve(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>x[i]>>y[i];
    }

    for(int i=1;i<=n;i++){
        for(int j=i+1;j<=n;j++){
            for(int k=j+1;k<=n;k++){
                for(int t=k+1;t<=n;t++){
                    int dxij=x[i]-x[j],dyij=y[i]-y[j];
                    int dxjk=x[j]-x[k],dyjk=y[j]-y[k];
                    int dxkt=x[k]-x[t],dykt=y[k]-y[t];
                    int dxik=x[i]-x[k],dyik=y[i]-y[k];
                    int dxjt=x[j]-x[t],dyjt=y[j]-y[t];

                    if(dxij*dyjk-dxjk*dyij==0||
                       dxik*dykt-dxkt*dyik==0||
                       dxjk*dykt-dxkt*dyjk==0||
                       dxij*dyjt-dxjt*dyij==0  )
                       ans--;
                }
            }
        }
    }
    cout<<ans+n*(n-1)*(n-2)*(n-3)/24;
}

signed main(){
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    cout<<fixed<<setprecision(12);
    int t=1;
    main_init();
    //cin>>t;
    while (t--)
		solve();
}

G. Guadalajara trains

有点久远记不太清了,好像是前缀和。

#include <bits/stdc++.h>
#define int long long
#define endl '\n'
#define lowbit(x) (x&(-x))
#define ull unsigned long long 
#define pii pair<int,int>
using namespace std;
const string yes="Yes\n",no="No\n";
const int N = 100005,inf = 2e18,mod=1000000007;
int qpow(int x,int y=mod-2,int mo=mod,int res=1){
    for(;y;(x*=x)%=mo,y>>=1)if(y&1)(res*=x)%=mo;
    return res;
}
int jie[500005],invjie[500005];
int C(int n,int m){return jie[n]*invjie[m]%mod*invjie[n-m]%mod;}
void main_init(){
    int n=500000;jie[0]=1;for(int i=1;i<=n;i++)jie[i]=jie[i-1]*i%mod;
    invjie[n]=qpow(jie[n]);for(int i=n-1;~i;i--)invjie[i]=invjie[i+1]*(i+1)%mod;
}
int n,m;
int a[1000005];
int d[1000005];
int lx[1000005],rx[1000005],ly[1000005],ry[1000005];
void solve(){
    cin>>n;
    for(int i=1;i<n;i++){
        cin>>d[i];
    }
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    for(int i=1;i<=n;i++){
        lx[i]=rx[i-1]+d[i-1];
        rx[i]=lx[i]+a[i];
    }
    for(int i=n;i;i--){
        ly[i]=ry[i+1]+d[i];
        ry[i]=ly[i]+a[i];
    }
    int ans=0;
    for(int i=1;i<=n;i++){
        ans+=max(0ll,min(rx[i],ry[i])-max(lx[i],ly[i]));
    }
    cout<<ans;
}
signed main(){
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    cout<<fixed<<setprecision(12);
    int t=1;
    main_init();
    //cin>>t;
    while (t--)
		solve();
}

H. How Many Laughs

容斥。

#include <bits/stdc++.h>
#define int long long
#define endl '\n'
#define lowbit(x) (x&(-x))
#define ull unsigned long long 
#define pii pair<int,int>
using namespace std;
const string yes="Yes\n",no="No\n";
const int N = 100005,inf = 2e18,mod=1000000007;
int qpow(int x,int y=mod-2,int mo=mod,int res=1){
    for(;y;(x*=x)%=mo,y>>=1)if(y&1)(res*=x)%=mo;
    return res;
}
int jie[500005],invjie[500005];
int C(int n,int m){return jie[n]*invjie[m]%mod*invjie[n-m]%mod;}
void main_init(){
    int n=500000;jie[0]=1;for(int i=1;i<=n;i++)jie[i]=jie[i-1]*i%mod;
    invjie[n]=qpow(jie[n]);for(int i=n-1;~i;i--)invjie[i]=invjie[i+1]*(i+1)%mod;
}
int n,m,x;
int a[2000005];
int d[1000005];
int lx[1000005],rx[1000005],ly[1000005],ry[1000005];
int dp[2000005];
int ans;
void solve(){
    cin>>n>>m;
    for(int i=0;i<n;i++){
        cin>>a[1<<i];
    }
    for(int i=1;i<(1<<n);i++){
        int x=lowbit(i);
        if(i!=x){
            int d=__gcd(a[x],a[i-x]);
            a[i]=min(mod,a[x]*a[i-x]/d);
        }
        dp[i]=m/a[i];
    }
    for(int i=1;i<(1<<n);i++){
        if(__builtin_popcount(i)%2){
            ans+=dp[i];
        }
        else{
            ans-=dp[i];
        }
    }
    cout<<ans;
}
signed main(){
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    cout<<fixed<<setprecision(12);
    int t=1;
    main_init();
    //cin>>t;
    while (t--)
		solve();
}

I. Inversion Counting

根号分治。注意分治的大小应该选为 n q \frac{n} {\sqrt q} q n (同莫队),这样复杂度是严格的 O ( n q ) O(n \sqrt q) O(nq )

#include <bits/stdc++.h>
#define int long long
#define endl '\n'
#define lowbit(x) (x&(-x))
#define ull unsigned long long 
#define pii pair<int,int>
using namespace std;
const string yes="Yes\n",no="No\n";
const int N = 100005,inf = 2e18,mod=1000000007;
int qpow(int x,int y=mod-2,int mo=mod,int res=1){
    for(;y;(x*=x)%=mo,y>>=1)if(y&1)(res*=x)%=mo;
    return res;
}
int jie[500005],invjie[500005];
int C(int n,int m){return jie[n]*invjie[m]%mod*invjie[n-m]%mod;}
void main_init(){
    int n=500000;jie[0]=1;for(int i=1;i<=n;i++)jie[i]=jie[i-1]*i%mod;
    invjie[n]=qpow(jie[n]);for(int i=n-1;~i;i--)invjie[i]=invjie[i+1]*(i+1)%mod;
}
int n,k,q,d=60,ans,cnt;
int a[100005],tr[100005],big[100005],sum[100005];
int id[100005];
vector<int>pos[100005],dp[100005],bigpos;
void add(int x,int k){for(;x<=n;x+=lowbit(x))tr[x]+=k;}
int qry(int x,int res=0){for(;x;x-=lowbit(x))res+=tr[x];return res;}
void update(int x,int y){
    if(!pos[x].size()||!pos[y].size())return;
    if(big[y]){//x->y==dp[x][big[y]],y->x==pos[x].size()*pos[y].size()-
        ans+=pos[x].size()*pos[y].size()-2*dp[x][big[y]];
        return;
    }
    if(big[x]){
        ans-=pos[x].size()*pos[y].size()-2*dp[y][big[x]];
        return;
    }
    for(int l=0,r=0,n=pos[x].size(),m=pos[y].size();l<n;){
        if(r==m||pos[x][l]<pos[y][r]){ans+=m-2*r;l++;}
        else{r++;}
    }
}
void solve(){
    cin>>n>>k>>q;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        pos[a[i]].push_back(i);
        add(a[i],1);
        ans+=i-qry(a[i]);
    }
    for(int i=1;i<=k;i++){
        id[i]=i;
        if(pos[i].size()>=d){
            big[i]=++cnt;
            bigpos.push_back(i);
        }
    }
    for(int i=1;i<=k;i++){
        if(pos[i].size()){
            dp[i].resize(cnt+1);
        }
    }
    for(int i=1;i<=n;i++){
        int x=a[i];
        for(auto &y:bigpos){//计算y->x数量
            dp[x][big[y]]+=sum[y];
        }
        sum[x]++;
    }
    while(q--){
        int x;cin>>x;
        update(id[x],id[x+1]);
        swap(id[x],id[x+1]);
        cout<<ans<<endl;
    }
}

signed main(){
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    cout<<fixed<<setprecision(12);
    int t=1;
    main_init();
    //cin>>t;
    while (t--)
		solve();
}

J. Joining the KAK

爆搜

#include <bits/stdc++.h>
#define int long long
#define endl '\n'
#define lowbit(x) (x&(-x))
#define ull unsigned long long 
#define pii pair<int,int>
using namespace std;
const string yes="Yes\n",no="No\n";
const int N = 100005,inf = 2e18,mod=1000000007;
int qpow(int x,int y=mod-2,int mo=mod,int res=1){
    for(;y;(x*=x)%=mo,y>>=1)if(y&1)(res*=x)%=mo;
    return res;
}
int jie[500005],invjie[500005];
int C(int n,int m){return jie[n]*invjie[m]%mod*invjie[n-m]%mod;}
void main_init(){
    int n=500000;jie[0]=1;for(int i=1;i<=n;i++)jie[i]=jie[i-1]*i%mod;
    invjie[n]=qpow(jie[n]);for(int i=n-1;~i;i--)invjie[i]=invjie[i+1]*(i+1)%mod;
}
int n,k,anslen,len,nowk;
string s;
char ans[1005];
int cnt[200];
void dfs(int now){
    for(int i='a';i<='z';i++){
        if(cnt[i]){
            ans[now]=i;
            nowk++;
            cnt[i]--;
            anslen=now;
            if(nowk==k)return;
            dfs(now+1);
            if(nowk==k)return;
            cnt[i]++;
        }
    }
}
queue<string>q;
int nowct[200];
string bfs(){
    q.push("");
    while(q.size()){
        auto s=q.front();q.pop();
        for(int i='a';i<='z';i++)nowct[i]=0;
        for(auto x:s)nowct[x]++;
        for(int i='a';i<='z';i++){
            if(nowct[i]<cnt[i]){
                nowk++;
                string t=s+(char)i;
                if(nowk==k)return t;
                q.push(t);
            }
        }
    }
}
void solve(){
    cin>>n>>k>>s;
    for(auto x:s){
        cnt[x]++;
    }
    cout<<bfs();
}
signed main(){
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    cout<<fixed<<setprecision(12);
    int t=1;
    main_init();
    //cin>>t;
    while (t--)
		solve();
}

K. Krystalova’s Trivial Problem

线段树维护平方和。

#include <bits/stdc++.h>
#define int long long 
#define endl '\n'
#define mid ((l+r)/2)
#define ls rt<<1
#define rs rt<<1|1
#define lson ls,l,mid
#define rson rs,mid+1,r
using namespace std;
const int inf=1e18,mod=1000000007;
const string yes="YES\n",no="NO\n";
int n,q,m;
int a[500005],b[500005],d[500005],h[500005];
string s;

struct seg_tree{
    vector<int>lazy,sz,tr,sum;
    seg_tree(){}
    seg_tree(int n):tr(n<<2),lazy(n<<2),sz(n<<2),sum(n<<2){}
    void push_up(int rt){tr[rt]=(tr[ls]+tr[rs])%mod;sum[rt]=(sum[ls]+sum[rs])%mod;}
    void build(int rt,int l,int r){
        sz[rt]=r-l+1;
        if(l==r){tr[rt]=a[l];sum[rt]=(a[l]*a[l])%mod;return;}
        build(lson);build(rson);
        push_up(rt);
    }
    void push_down(int rt){
        if(lazy[rt]){
            sum[ls]=(sum[ls]+2*lazy[rt]*tr[ls]%mod+lazy[rt]*lazy[rt]%mod*sz[ls]%mod)%mod;
            sum[rs]=(sum[rs]+2*lazy[rt]*tr[rs]%mod+lazy[rt]*lazy[rt]%mod*sz[rs]%mod)%mod;
            (tr[ls]+=lazy[rt]*sz[ls])%=mod;
            (tr[rs]+=lazy[rt]*sz[rs])%=mod;
            (lazy[ls]+=lazy[rt])%=mod;
            (lazy[rs]+=lazy[rt])%=mod;
            lazy[rt]=0;
        }
    }
    void change(int rt,int l,int r,int x,int k){}
    void update(int rt,int l,int r,int ql,int qr,int k){
        //cout<<rt<<" "<<l<<" "<<r<<" "<<ql<<" "<<qr<<" "<<k<<endl; 
        if(ql<=l&&r<=qr){
            sum[rt]=(sum[rt]+2*k*tr[rt]%mod+k*k%mod*sz[rt]%mod)%mod;
            tr[rt]=(tr[rt]+k*sz[rt])%mod;
            (lazy[rt]+=k)%=mod;
            return;
        }
        push_down(rt);
        if(mid>=ql) update(lson,ql,qr,k);
        if(mid<qr) update(rson,ql,qr,k);
        push_up(rt);
    }
    int query(int rt,int l,int r,int ql,int qr){
        if(ql<=l&&r<=qr)return sum[rt];
        push_down(rt);
        if(mid>=qr)return query(lson,ql,qr);
        if(mid<ql) return query(rson,ql,qr);
        return (query(lson,ql,qr)+query(rson,ql,qr))%mod;
    }
}seg;
#undef mid
int l[500005],r[500005],w[500005];
void solve(){
    cin>>n>>q;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    seg=seg_tree(n);
    seg.build(1,1,n);
    while(q--){
        char op;cin>>op;
        if(op=='u'){
            int l,r,w;cin>>l>>r>>w;
            w=(w+mod)%mod;
            seg.update(1,1,n,l,r,w);
        }
        else{
            int l,r;cin>>l>>r;
            cout<<seg.query(1,1,n,l,r)<<endl;
        }
    }
}
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    cout<<fixed<<setprecision(1);
    int t=1;
    while(t--){
        solve();
    }
}

L. Limited Increasing Sequences

dp文章来源地址https://www.toymoban.com/news/detail-401842.html

#include <bits/stdc++.h>
#define int long long
#define endl '\n'
#define lowbit(x) (x&(-x))
#define ull unsigned long long 
#define pii pair<int,int>
using namespace std;
const string yes="Yes\n",no="No\n";
const int N = 100005,inf = 2e18,mod=1000000007;
int qpow(int x,int y=mod-2,int mo=mod,int res=1){
    for(;y;(x*=x)%=mo,y>>=1)if(y&1)(res*=x)%=mo;
    return res;
}
int jie[500005],invjie[500005];
int C(int n,int m){return jie[n]*invjie[m]%mod*invjie[n-m]%mod;}
void main_init(){
    int n=500000;jie[0]=1;for(int i=1;i<=n;i++)jie[i]=jie[i-1]*i%mod;
    invjie[n]=qpow(jie[n]);for(int i=n-1;~i;i--)invjie[i]=invjie[i+1]*(i+1)%mod;
}
int n,m;
int ans;
int dis[200005],cost[200005];
vector<pii>p[200005];
queue<int>q;
int dp[1000005];
void solve(){
    cin>>n;
    dp[1]=1;
    for(int i=2;i<=n;i++){
        int dx=(dp[i-1]+mod-dp[(i-1)/2])%mod;
        dp[i]=(dx+dp[i-1])%mod;
    }
    cout<<(dp[n]+mod-dp[n-1])%mod;
}

signed main(){
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    cout<<fixed<<setprecision(12);
    int t=1;
    main_init();
    //cin>>t;
    while (t--)
		solve();
}

到了这里,关于训练记录番外篇(2):2022 ICPC Gran Premio de Mexico 2da Fecha的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 番外篇-区块链基础知识入门

    今天聊聊番外篇之Web3、区块链的基础知识~ Hash算法 将输入的数据映射为一个固定长度的字符串 字符串是64长度,16进制(2^4),4 * 64 = 256 【SHA256】hash演示:https://andersbrownworth.com/blockchain/hash 区块 记录数据的一个section 问题:“挖矿”是在做什么(计算随机数是多少) 演示:

    2024年02月02日
    浏览(45)
  • C++番外篇之动态爱心代码

    前言:今天我们给大家介绍一个有趣的代码,那就是爱心代码,前提是这段代码要先下载一个东西,就是有关C++头文件的,这段代码各位看看就好,当个乐子,因为涉及的代码知识很多。如果大家有兴趣研究的,可以把整段代码看一看。 下面直接先展现代码了: 这里是运行

    2024年02月05日
    浏览(39)
  • 番外篇 萌新版开发交付一条龙(☆▽☆)

    学习了一段时间的django和vue,对于前后端开发有了一个初步的了解,这里记录一下编写的流程和思路,主要是为了后面如果遗忘从哪里开始操作做一个起步引导作用 参考下前面django的文档https://moziang.blog.csdn.net/article/details/130720709 1、安装django环境 目录结构 2、项目添加应用模

    2024年02月21日
    浏览(37)
  • 【flink番外篇】12、ParameterTool使用示例

    一、Flink 专栏 Flink 专栏系统介绍某一知识点,并辅以具体的示例进行说明。 1、Flink 部署系列 本部分介绍Flink的部署、配置相关基础内容。 2、Flink基础系列 本部分介绍Flink 的基础部分,比如术语、架构、编程模型、编程指南、基本的datastream api用法、四大基石等内容。 3、

    2024年01月18日
    浏览(56)
  • Cartographer源码阅读---番外篇: Submap封装与维护

    Cartographer中Submap(子图)没有被直接的调用进行维护, 而是针对2D和3D场景分别派生出子类Submap2D和Submap3D, 进行调用. 以2D为例, 为了方便维护, 又把Submap2D封装成了ActiveSubmaps2D进行维护, 其维护方式类似与滑窗, 也是只维护最近的一些数据. 从私有变量可以看到, Submap维护了三个东西

    2024年02月05日
    浏览(40)
  • 【flink番外篇】16、DataStream 和 Table 相互转换示例

    一、Flink 专栏 Flink 专栏系统介绍某一知识点,并辅以具体的示例进行说明。 1、Flink 部署系列 本部分介绍Flink的部署、配置相关基础内容。 2、Flink基础系列 本部分介绍Flink 的基础部分,比如术语、架构、编程模型、编程指南、基本的datastream api用法、四大基石等内容。 3、

    2024年01月17日
    浏览(61)
  • 【Unity】Avatar与AvatarMask系统介绍(TPS.番外篇)

    这次也是拖了蛮久,一个是在修动画,一个是别的游戏确实比较能吸引住人。 在主要系列进行前,要先为接下来要讲的动画做一些基础知识的补充,这期是Avatar,即替身系统,以及AvatarMask的讲解。 对于动画,我的了解比较基础,大家可以去看这位的系列《动画入门》。 在这

    2024年02月09日
    浏览(35)
  • 【flink番外篇】13、Broadcast State 模式示例(完整版)

    一、Flink 专栏 Flink 专栏系统介绍某一知识点,并辅以具体的示例进行说明。 1、Flink 部署系列 本部分介绍Flink的部署、配置相关基础内容。 2、Flink基础系列 本部分介绍Flink 的基础部分,比如术语、架构、编程模型、编程指南、基本的datastream api用法、四大基石等内容。 3、

    2024年01月17日
    浏览(53)
  • 番外篇Diffusion&Stable Diffusion扩散模型与稳定扩散模型

    本篇文章为阅读笔记,,主要内容围绕扩散模型和稳定扩散模型展开,介绍了kl loss、vae模型的损失函数以及变分下限作为扩展部分。扩散模型是一种生成模型,定义了一个逐渐扩散的马尔科夫链,逐渐项数据添加噪声,然后学习逆扩散过程,从噪声中构建所需的数据样本。稳

    2024年02月03日
    浏览(51)
  • 算法通关村番外篇-LeetCode编程从0到1系列一

    大家好我是苏麟 , 今天开始带来LeetCode编程从0到1系列 . 编程基础 0 到 1 , 50 题掌握基础编程能力 描述 : 给你两个字符串 word1 和 word2 。请你从 word1 开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。 返

    2024年01月21日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包