ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Codeforces Round #791 (Div. 2) A-C

2022-05-16 02:31:45  阅读:154  来源: 互联网

标签:std cout 791 int sum Codeforces cin tie Div


Codeforces Round #791 (Div. 2) A-C

A

题目

https://codeforces.com/contest/1679/problem/A

题解

思路

知识点:数学,暴力,贪心。

考虑 \(n\%6\) 和 \(n\%4\) 的余数情况。

时间复杂度 \(O(1)\)

空间复杂度 \(O(1)\)

代码

#include <bits/stdc++.h>

using namespace std;

int main(){
    std::ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int t;
    cin>>t;
    while(t--){
        long long n;
        cin>>n;
        if(n<4 || n&1) cout<<-1<<'\n';
        else{
            long long d = n/6,r = n%6;
            cout<<d + (r != 0)<<' ';
            cout<<n/4<<'\n';
        }
    }
    return 0;
}

B

题目

https://codeforces.com/contest/1679/problem/B

题解

思路

知识点:数据结构,模拟。

如果执行操作 \(2\) ,那么所有数都变成 \(x\) ,我们可以理解为把数组清空了,但 \(sum\) 的基础值是 \(n*x\) ,下次单点修改时只需要知道清空之后,这个元素有没有被修改过,即在数组中是否存在,分别做不同的处理。可以用 \(map\) 维护下标与值的映射。(也可以记录上次整体修改的访问时间,用一个数组保存每个位置在哪次整体修改之后修改的访问时间)

时间复杂度 \(O(n+q)\)

空间复杂度 \(O(n)\)

代码

#include <bits/stdc++.h>

using namespace std;

int main(){
    std::ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int n,q;
    cin>>n>>q;
    map<int,int> a;
    long long sum = 0;
    for(int i = 1;i<=n;i++) cin>>a[i],sum+=a[i];
    int pre = 0;
    while(q--){
        int t;
        cin>>t;
        if(t == 1){
            int i,x;
            cin>>i>>x;
            if(a.count(i)) sum += x-a[i];
            else sum = sum - pre + x;
            a[i] = x;
            cout<<sum<<'\n';
        }
        else if(t == 2){
            int x;
            cin>>x;
            sum = 1LL * n * x;
            pre = x;
            a.clear();
            cout<<sum<<'\n';
        }
    }
    return 0;
}

C

题目

https://codeforces.com/contest/1679/problem/C

题解

思路

知识点:树状数组(或者线段树),模拟。

如果一个区块被攻击,那么肯定对应的所有行或者所有列都存在棋子,分别计算存在棋子的行和列的数量,行或列有一个满足与区块行或列相等,那么区块所有格子都能被攻击到。用树状数组的单点修改和区间和维护行和列的棋子存在状态和计算,用数组维护各行和列的当前棋子数量辅助树状数组的修改。

用线段树也可以,常数比较大。

(虽然但是,我还不会,哈哈哈哈,抄佬板子,也用不好,焯)

时间复杂度 \(O(qlogn)\)

空间复杂度 \(O(n)\)

代码

#include <bits/stdc++.h>

using namespace std;

template <typename T>
struct Fenwick{
    const int n;
    vector<T> a;
    Fenwick(int n):n(n),a(n){}
    void add(int x,T v) {
        for (int i = x+1;i<=n;i += i&-i){
            a[i-1] += v;
        }
    }
    T sum(int x) {
        T ans = 0;
        for (int i = x;i>0;i -= i&-i){
            ans += a[i-1];
        }
        return ans;
    }
    T rangeSum(int l,int r){
        return sum(r) - sum(l);
    }
};

int row[100007],col[100007];

int main(){
    std::ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int n,q;
    cin>>n>>q;
    Fenwick<int> rowb(n+7),colb(n+7);
    while(q--){
        int t;
        cin>>t;
        if(t == 1){
            int x,y;
            cin>>x>>y;
            row[x]++;
            col[y]++;
            if(row[x] == 1) rowb.add(x,1);
            if(col[y] == 1) colb.add(y,1);
        }
        else if(t == 2){
            int x,y;
            cin>>x>>y;
            row[x]--;
            col[y]--;
            if(row[x] == 0) rowb.add(x,-1);
            if(col[y] == 0) colb.add(y,-1);
        }
        else if(t == 3){
            int x1,x2,y1,y2;
            cin>>x1>>y1>>x2>>y2;
            if(rowb.rangeSum(x1,x2+1) == x2-x1+1 || colb.rangeSum(y1,y2+1) == y2-y1+1) cout<<"Yes"<<'\n';
            else cout<<"No"<<'\n';
        }
    }
    return 0;
}

标签:std,cout,791,int,sum,Codeforces,cin,tie,Div
来源: https://www.cnblogs.com/BlankYang/p/16275512.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有