Codeforces Round 881 (Div. 3)

A.

#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <map>
#include <set>
#include <queue>
using namespace std;
const int N = 3e5+10,mod=1e9+7;
#define ll long long
typedef pair<int, int> PII;
int n,m,k;
int a[N];
bool st[N];
void solve(){
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i];
    sort(a+1,a+1+n);
    int l=1,r=n;
    int res=0;
    while(l<r){
        res+=a[r]-a[l];
        r--;l++;
    }
    cout<<res<<"\n";
}
signed main(){
    cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);
    int t=1;
    cin>>t;
    while(t--) solve();
}

B.

#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <map>
#include <set>
#include <queue>
using namespace std;
const int N = 2e5+10,mod=1e9+7;
#define int long long
typedef long long LL;
typedef pair<int, int> PII;
int n,m,k;
vector<int> g[N];
int a[N];
void solve(){
    cin>>n;
    int s=0,cnt=0;
    int now=0;
    for(int i=1;i<=n;i++){
        int x;cin>>x;
        s+=abs(x);
        if(x>0&&now)
        {
            cnt++;now=0;
        }
        else if(x<0&&!now){
            now=1;
        }
    }
    if(now) cnt++;
    cout<<s<<" "<<cnt<<"\n";
}
signed main(){
    cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);
    int t=1;
    cin>>t;
    while(t--) solve();
}

C.

#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <map>
#include <set>
#include <queue>
using namespace std;
const int N = 2e5+10,mod=1e9+7;
#define int long long
typedef long long LL;
typedef pair<int, int> PII;
int n,m,k;
vector<int> g[N];
int a[N];
void solve(){
    cin>>n;
    int res=0;
    while(n){
        res+=n;
        n/=2;
    }
    cout<<res<<"\n";
}
signed main(){
    cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);
    int t=1;
    cin>>t;
    while(t--) solve();
}

D.

#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <map>
#include <set>
#include <queue>
using namespace std;
const int N = 2e5+10,mod=1e9+7;
#define int long long
typedef long long LL;
typedef pair<int, int> PII;
int n,m,k;
vector<int> g[N];
void solve(){
    cin>>n;
    vector<int> sz(n+1,0);
    for(int i=1;i<=n;i++) g[i].clear();
    for(int i=1;i<n;i++){
        int a,b;
        cin>>a>>b;
        g[a].push_back(b);
        g[b].push_back(a);
    }
    function<void(int,int)> dfs=[&](int u,int fa)
    {
        bool flag=true;
        for(auto&j:g[u])
        {
            if(j==fa) continue;
            flag=false;
            dfs(j,u);
            sz[u]+=sz[j];
        }
        sz[u]+=flag;
    };
    dfs(1,-1);
    cin>>m;
    while (m -- ){
        int x,y;cin>>x>>y;
        cout<<sz[x]*sz[y]<<"\n";
    }
}
signed main(){
    cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);
    int t=1;
    cin>>t;
    while(t--) solve();
}

E.

#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <map>
#include <set>
#include <queue>
using namespace std;
const int N = 1e5+10,mod=1e9+7;
#define ll long long
typedef long long LL;
typedef pair<int, int> PII;
int n,m,k;
int l[N],r[N];
int a[N],q[N],s[N];
bool check(int x){
    for(int i=1;i<=n;i++)
    {
        a[i]=0,s[i]=0;
    }
    for(int i=1;i<=x;i++){
        a[q[i]]=1;
    }
    for(int i=1;i<=n;i++){
        s[i]=s[i-1]+a[i];
    }
    for(int i=1;i<=k;i++){
        int left=l[i],right=r[i];
        int cha=right-left+1;
        if((right-left+1)%2==0){
            if(s[right]-s[left-1]>cha/2) return true;
        }
        else
        {
            if(s[right]-s[left-1]>cha/2) return true;    
        }
    }
    return false;
}
void solve(){
    cin>>n>>k;
    for(int i=1;i<=k;i++){
        cin>>l[i]>>r[i];
    }
    cin>>m;
    for(int i=1;i<=m;i++) cin>>q[i];
    int l=1,r=m;
    while(l<r){
        int mid=l+r>>1;
        if(check(mid)) r=mid;
        else l=mid+1;
    }
    if(!check(l)){
        cout<<-1<<"\n";
    }
    else cout<<l<<"\n";
}
signed main(){
    cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);
    int t=1;
    cin>>t;
    while(t--) solve();
}

F1

#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <map>
#include <set>
#include <queue>
using namespace std;
const int N = 4e5+10,mod=1e9+7;
#define int long long
typedef long long LL;
typedef pair<int, int> PII;
int n,m,k;
vector<int> g[N];
int w[N];
void solve(){
    cin>>n;
    vector<int> mx(n+10,0),mn(n+10,0);
    vector<int> f1(n+10,0),f2(n+10,0);
    
    for(int i=1;i<=n;i++) w[i]=0;
    
    int now=1;
    w[now]=1;
    f1[now]=1;
    f2[now]=0;
    mx[now]=max({mx[now],1ll,f1[now]});
    mn[now]=min({mn[now],1ll,f2[now]});
    
    for(int i=1;i<=n;i++)
    {
        char op;
        int x,y,z;
        cin>>op;
        if(op=='+')
        {
            cin>>x>>y;
            now++;
            w[now]=y;
            
            f1[now]=max(f1[x]+y,y);
            f2[now]=min(f2[x]+y,y);
            mx[now]=max({mx[x],mx[now],y,f1[now]});
            mn[now]=min({mn[x],mn[now],y,f2[now]});
        }
        else{
            cin>>x>>y>>z;
            if(x>y) swap(x,y);
            if(mx[y]>=z&&z>=mn[y])
            {
                cout<<"YES\n";
            }
            else cout<<"NO\n";
        }
    }
}
signed main(){
    cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);
    int t=1;
    cin>>t;
    while(t--) solve();
}

F2

#include<bits/stdc++.h>
using namespace std;
using i64 = int64_t;
const int h = 17;
struct T
{
	int sum;
	int mx, mxl, mxr;
	int mn, mnl, mnr;
	static T init(int x)
	{
		int sum = x;
		int mx = max(x, 0);
		int mn = min(x, 0);
		return {sum, mx, mx, mx, mn, mn, mn};	
	}	
	T rev() const {return {sum, mx, mxr, mxl, mn, mnr, mnl}; }
	T operator +(const T &o) const {
		return {sum + o.sum, 
			max({mx, o.mx, mxr + o.mxl}),
			max(mxl, sum + o.mxl),
			max(o.mxr, mxr + o.sum),
			min({mn, o.mn, mnr + o.mnl}),
			min(mnl, sum + o.mnl),
			min(o.mnr, mnr + o.sum)
		};
	}
};

void solve()
{
	int n, m = 1;
	cin >> n;
	vector<array<int, h>> p(n + 2);
	vector<array<T, h>> t(n + 2);
	vector<int> dep(n + 2);
	p[1].fill(0);
	t[1][0] = T::init(1);
	
	for(int i = 0; i < n; i ++ )
	{
		char op;
		cin >> op;
		if(op == '+')
		{
			int u, x;
			cin >> u >> x;
			m += 1;
			dep[m] = dep[u] + 1;
			p[m][0] = u;
			t[m][0] = T::init(x);
			for(int j = 1; j < h; j ++ )
			{
				p[m][j] = p[p[m][j - 1]][j - 1];
				t[m][j] = t[m][j - 1] + t[p[m][j - 1]][j - 1];
			}
		} else {
			int u, v, k;
			cin >> u >> v >> k;
			T l = T::init(0), r = T::init(0), res;
			if(dep[u] < dep[v]) {
				swap(u, v);
			}
			for(int j = h - 1; j >= 0; j -- )
			{
				if(dep[u]-(1<<j)  >= dep[v]) {
					l = l + t[u][j];
					u = p[u][j];
				}
			}
			if(u == v) {
				res = l + t[u][0];
			} else {
				for(int j = h - 1; j >= 0; j -- ) 
				{
					if(p[u][j] != p[v][j]) {
						l = l + t[u][j];
						r = r + t[v][j];
						u = p[u][j];
						v = p[v][j];
					}
				}
		
				res = l + t[u][1] + t[u][0]+r.rev();
			}
			cout << (res.mx >= k && res.mn <= k ? "YES\n" : "NO\n");
		}
	}
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值