• P4879 ycz的妹子


    思路

    让你干啥你就干啥呗
    查询第x个妹子就get一下再修改
    这里稳一点就维护了三个东西,也许两个也可以

    代码

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    #include <queue>
    #define ls rt<<1
    #define rs rt<<1|1
    #define ll long long
    #define FOR(i,a,b) for(int i=a;i<=b;++i)
    using namespace std;
    const int maxn = 5e5 + 7;
    int read() {
        int x = 0, f = 1; char s = getchar();
        for (; s < '0' || s > '9'; s = getchar()) if (s == '-') f = -1;
        for (; s >= '0' && s <= '9'; s = getchar()) x = x * 10 + s - '0';
        return x * f;
    }
    int n,m;
    int a[maxn];
    struct node {
    	int l,r,size,gs;
    	ll sum,ans;
    }e[maxn<<2];
    void pushup(int rt) {
    	e[rt].gs=e[ls].gs+e[rs].gs;
    	e[rt].ans=e[ls].ans+e[rs].ans;
    	e[rt].sum=e[ls].sum+e[rs].sum;
    }
    void build(int l,int r,int rt) {
    	e[rt].l=l,e[rt].r=r,e[rt].size=r-l+1;
    	if(l==r) {
    		if(l<=n) {
    			e[rt].gs=1;
    			e[rt].ans=e[rt].sum=a[l];
    		}
    		return;
    	}
    	int mid=(l+r)>>1;
    	build(l,mid,ls);
    	build(mid+1,r,rs);
    	pushup(rt);
    }
    void modify_1(int L,int k,int rt) { // The Lth city plus k .
    	if(e[rt].l==e[rt].r) {
    		e[rt].sum+=k;
    		if(e[rt].gs) e[rt].ans+=k;
    		return;
    	}
    	int mid=(e[rt].l+e[rt].r)>>1;
    	if(L<=mid) modify_1(L,k,ls);
    	else modify_1(L,k,rs);
    	pushup(rt);
    }
    void modify_2(int L,int k,int rt) { // The Lth sister fell in love with him.
    	if(e[rt].l==e[rt].r) {
    	    e[rt].gs=k;
    		e[rt].ans=e[rt].sum=0;
    		return;
    	}
    	int mid=(e[rt].l+e[rt].r)>>1;
    	if(L<=mid) modify_2(L,k,ls);
    	else modify_2(L,k,rs);
    	pushup(rt);	
    }
    int get(int k,int rt) {
    	if(e[rt].l==e[rt].r)
    		return e[rt].l;
    	if(k <= e[ls].gs) return get(k,ls);
    	else return get(k-e[ls].gs,rs);
    }
    int main() {
    	n=read(),m=read();
    	FOR(i,1,n) a[i]=read();
    	build(1,5e5,1);
    	FOR(i,1,m) {
    		char s;
    		scanf("%s",&s);
    		if(s=='Q') {
    			printf("%lld
    ",e[1].ans);
    		} else if(s=='C') {
    			int x=read(),y=read();
    			modify_1(x,-y,1);
    		} else if(s=='D') {
    			int x=read();
    			modify_2(get(x,1),0,1);
    		} else if(s=='I') {
    			int x=read(),y=read();
    			modify_2(x,1,1);
    			modify_1(x,y,1);
    		}
    	}
    	return 0;
    }
    
  • 相关阅读:
    量化平台的发展转
    jmeter全面总结8jmeter实战
    月见笔谈【一】——关于悲剧
    为什么要不断接触和学习新技术之我见
    WPF后台动态调用样式文件
    WPF后台动态添加TabItem并设置样式
    SQL查询SQLSERVER数据库中的临时表结构脚本
    防抖功能的实现
    项目中自定义进度条的实现
    vue3 请求响应拦截
  • 原文地址:https://www.cnblogs.com/dsrdsr/p/9878124.html
Copyright © 2020-2023  润新知