Codeforces Round #727 (Div. 2) 题解

官方题解

传送门

A - Contest Start

题目链接

答案

#include <iostream>
#include <algorithm>
#include<bits/stdc++.h>
#define ll long long
#define mem(a,b) memset(a,b,sizeof a)
#define ull unsigned long long
#define INF 0x3f3f3f3f3f3f3f3f
#define inf 0x3f3f3f3f
#define rep(i,a,b) for(auto i=a;i<=b;++i)
#define bep(i,a,b) for(auto i=a;i>=b;--i)
#define lowbit(x) x&(-x)
#define PII pair<int,int>
#define x first
#define y second
#define PLL pair<ll,ll>
#define PI acos(-1)
#define pb push_back
#define eb emplace_back
const double eps = 1e-6;
const int mod = 998244353;
const int MOD = 1e9 + 7;
const int N = 2e5 + 10;
const int M = 111;
int dx[]={-1, 0, 1, 0};
int dy[]={0, 1, 0, -1};
using namespace std;

inline void solve(){
    for(int i=1;i<=5;i++) i++;
    ll n,x,k;
    cin>>n>>x>>k;
    string s,ssss,sssss;
    if(x>k){
        cout<<"0"<<endl;
        return ;
    }
    int kkkkkkkkk;
    ll p=k/x;
    if(n<=p){
        ll res=(n-1)*n/2;
        cout<<res<<endl;
        return ;
    }
    else{
        n-=p;
        ll res=n*p;
        res+=(p-1)*p/2;
        cout<<res<<endl;
        return ;
    }
    for(int i=1;i<=5;i++) i++;
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    for(int i=1;i<=5;i++) i++;
    int t=1;
    cin>>t;
    while(t--) solve();
    return 0;
}

B - Love Song

题目链接

答案

#include <bits/stdc++.h>

#include <algorithm>
#include <iostream>
#define ll long long
#define mem(a, b) memset(a, b, sizeof a)
#define ull unsigned long long
#define INF 0x3f3f3f3f3f3f3f3f
#define inf 0x3f3f3f3f
#define rep(i, a, b) for (auto i = a; i <= b; ++i)
#define bep(i, a, b) for (auto i = a; i >= b; --i)
#define lowbit(x) x&(-x)
#define PII pair<int, int>
#define x first
#define y second
#define PLL pair<ll, ll>
#define PI acos(-1)
#define pb push_back
#define eb emplace_back
const double eps = 1e-6;
const int mod = 998244353;
const int MOD = 1e9 + 7;
const int N = 2e5 + 10;
const int M = 111;
int dx[] = {-1, 0, 1, 0};
int dy[] = {0, 1, 0, -1};
using namespace std;

map<int, int> mp;

inline void solve() {
    for (int i = 1; i <= 5; i++) i++;
    int n, q;
    cin >> n >> q;
    string s;
    cin >> s;
    int nnnnnnn = 0;
    int kkkkkkkk;
    string str = "";
    for (int i = 0; i < n; i++) {
        int k = s[i] - 'a' + 1;
        for (int j = 0; j < k; j++) {
            str += s[i];
        }
        mp[i] = str.size();
    }
    while (q--) {
        int l, r;
        cin >> l >> r;
        l--, r--;
        if (!l)
            cout << mp[r] << endl;
        else
            cout << mp[r] - mp[l - 1] << endl;
    }
    for (int i = 1; i <= 5; i++) i++;
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int t = 1;
    for (int i = 1; i <= 5; i++) i++;
    // cin>>t;
    while (t--) solve();
    return 0;
}

C - Stable Groups

题目链接

答案

#include <iostream>
#include <algorithm>
#include<bits/stdc++.h>
#define ll long long
#define mem(a,b) memset(a,b,sizeof a)
#define ull unsigned long long
#define INF 0x3f3f3f3f3f3f3f3f
#define inf 0x3f3f3f3f
#define rep(i,a,b) for(auto i=a;i<=b;++i)
#define bep(i,a,b) for(auto i=a;i>=b;--i)
#define lowbit(x) x&(-x)
#define PII pair<int,int>
#define x first
#define y second
#define PLL pair<ll,ll>
#define PI acos(-1)
#define pb push_back
#define eb emplace_back
const double eps = 1e-6;
const int mod = 998244353;
const int MOD = 1e9 + 7;
const int N = 2e5 + 10;
const int M = 111;
int dx[]={-1, 0, 1, 0};
int dy[]={0, 1, 0, -1};
using namespace std;

ll dp[N];
vector<ll>vp;

inline void solve(){
    ll n,k,x;
    cin>>n>>k>>x;
    for(int i=1;i<=n;i++) cin>>dp[i];
    sort(dp+1,dp+1+n);
    for(int i=2;i<=n;i++){
        if(dp[i]-dp[i-1]>x) vp.eb(dp[i]-dp[i-1]);
    }
    int len=vp.size();
    if(!vp.size()){
        cout<<"1"<<endl;
        return ;
    }
    sort(vp.begin(),vp.end());
    for(int i=0;i<vp.size();i++){
        ll p=(vp[i]-1)/x;
        if(k>=p) len--,k-=p;
        else break;
    }
    cout<<len+1<<endl;
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int t=1;
    //cin>>t;
    while(t--) solve();
    return 0;
}

D - PriceFixed

题目链接

答案

#include <iostream>
#include <algorithm>
#include<bits/stdc++.h>
#define ll long long
#define mem(a,b) memset(a,b,sizeof a)
#define ull unsigned long long
#define INF 0x3f3f3f3f3f3f3f3f
#define inf 0x3f3f3f3f
#define rep(i,a,b) for(auto i=a;i<=b;++i)
#define bep(i,a,b) for(auto i=a;i>=b;--i)
#define lowbit(x) x&(-x)
#define PII pair<int,int>
#define x first
#define y second
#define PLL pair<ll,ll>
#define PI acos(-1)
#define pb push_back
#define eb emplace_back
const double eps = 1e-6;
const int mod = 998244353;
const int MOD = 1e9 + 7;
const int N = 2e5 + 10;
const int M = 111;
int dx[]={-1, 0, 1, 0};
int dy[]={0, 1, 0, -1};
using namespace std;

PLL dp[N];

inline void solve(){
    for(int i=1;i<=5;i++) i++;
    ll n;
    cin>>n;
    ll res=0;
    ll u,v;
    for(int i=1;i<=5;i++) i++;
    for(int i=1;i<=n;i++){
        cin>>u>>v;
        dp[i]={v+1,u};
        res+=u;
    }
    sort(dp+1,dp+1+n);
    int kkkkkkkk;
    for(int i=1;i<=5;i++) i++;
    reverse(dp+1,dp+1+n);
    ll pos=res;
    ll val=0ll;
    for(int i=1;i<=5;i++) i++;
    int ssssssss=0;
    for(int i=1;i<=n;i++){
        if(dp[i].x>res) continue;
        ll dist=pos-dp[i].x+1;
        ll p=dp[i].y;
        if(p>=dist){
            pos=dp[i].x-1;
            val+=dist;
        }
        else{
            pos-=p;
            val+=p;
        }
    }
    ll col=(res-val)*2;
    cout<<val+col<<endl;
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    for(int i=1;i<=5;i++) i++;
    int t=1;
    //cin>>t;
    while(t--) solve();
    return 0;
}

F - Strange Array (补)

题目链接

答案

#include <iostream>
#include <algorithm>
#include<bits/stdc++.h>
#define ll long long
#define mem(a,b) memset(a,b,sizeof a)
#define ull unsigned long long
#define INF 0x3f3f3f3f3f3f3f3f
#define inf 0x3f3f3f3f
#define rep(i,a,b) for(auto i=a;i<=b;++i)
#define bep(i,a,b) for(auto i=a;i>=b;--i)
#define lowbit(x) x&(-x)
#define PII pair<int,int>
#define x first
#define y second
#define PLL pair<ll,ll>
#define PI acos(-1)
#define pb push_back
#define eb emplace_back
const double eps = 1e-6;
const int mod = 998244353;
const int MOD = 1e9 + 7;
const int N = 2e5 + 10;
const int M = 111;
int dx[]={-1, 0, 1, 0};
int dy[]={0, 1, 0, -1};
using namespace std;

struct segtree{
    int mx[N*2];
    int mn[N*2];
    int lz[N];
    int n;
    void init(int k){
        n=k;
        for(int i=0;i<n;i++) mx[i+n]=mn[i+n]=i;
        for(int i=n-1;i>0;i--){
            mx[i]=max(mx[i<<1],mx[i<<1|1]);
            mn[i]=min(mn[i<<1],mn[i<<1|1]);
            lz[i]=0;
        }
    }
    void updata(int p,int d){
        mx[p]+=d;
        mn[p]+=d;
        if(p<n) lz[p]+=d;
    }
    void pull(int p) {
        for (;p>1;p>>=1){
            mx[p>>1]=max(mx[p],mx[p^1]);
            mn[p>>1]=min(mn[p],mn[p^1]);
            mn[p>>1]+=lz[p>>1],mx[p>>1]+=lz[p>>1];
        }
    }
    void push(int p) {
        for (int h=__lg(n);h>=0;h--) {
            int i=p>>h;
            if(!lz[i>>1]) continue;
            updata(i,lz[i>>1]);
            updata(i^1,lz[i>>1]);
            lz[i>>1]=0;
        }
    }
    void add(int l,int r,int d) {
        int L=l,R=r;
        for (l+=n,r+=n;l<r;l>>=1,r>>=1) {
            if(l&1) updata(l++,d);
            if(r&1) updata(--r,d);
        }
        pull(L+n);
        pull(R-1+n);
    }
    int Qmin(int l,int r) {
        int res=inf;
        push(l+n);
        push(r-1+n);
        for (l+=n, r+=n;l<r;l>>=1,r>>=1) {
            if(l&1) res=min(res,mn[l++]);
            if(r&1) res=min(res,mn[--r]);
        }
        return res;
    }
    int Qmax(int l, int r) {
        int res=-inf;
        push(l+n);
        push(r-1+n);
        for (l+=n,r+=n;l<r;l>>=1,r>>= 1) {
            if(l&1) res=max(res,mx[l++]);
            if(r&1) res=max(res,mx[--r]);
        }
        return res;
    }
};

segtree seg;
map<int,vector<int>>mp;

inline void solve(){
    int n;
    cin>>n;
    vector<int>dp(n);
    for(int i=0;i<n;i++){
        cin>>dp[i];
        mp[dp[i]].eb(i+1);
    }
    seg.init(n+1);
    vector<int>A(n+1);
    vector<int>B(n+1);
    for(auto it:mp){
        auto idx=it.y;
        for(auto i:idx) A[i]=max({A[i],seg.Qmax(i,n+1)-seg.Qmin(0,i),seg.Qmax(0,i)-seg.Qmin(i,n+1)});
        for(auto i:idx) seg.add(i,n+1,-2);
        for(auto i:idx) B[i]=max({B[i],seg.Qmax(i,n+1)-seg.Qmin(0,i),seg.Qmax(0,i)-seg.Qmin(i,n+1)});
    }
    for(int i=1;i<=n;i++) cout<<max(A[i]/2,(B[i]-1)/2)<<" ";
    cout<<endl;
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int t=1;
    //cin>>t;
    while(t--) solve();
    return 0;
}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值