zoukankan      html  css  js  c++  java
  • 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;
    }
    
  • 相关阅读:
    HTML5 模板推荐
    OpenCV初探
    微信开放框架-UCToo
    ProFTPD 初探
    移动开发者服务平台-友盟
    线程原理理解
    JVM参数及性能调优
    GC——垃圾回收
    JVM内存模型
    php常用 随机数
  • 原文地址:https://www.cnblogs.com/dsrdsr/p/9878124.html
Copyright © 2011-2022 走看看