zoukankan      html  css  js  c++  java
  • E. GukiZ and GukiZiana

    http://codeforces.com/contest/551/problem/E

    分块入门题.......

    #include <bits/stdc++.h>
    #define N 500005
    #define INF 0x3f3f3f3f
    #define ll long long
    using namespace std;
    ll read()
    {
        ll x=0,f=1;char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
    ll a[N],flag[1005];int p[N];
    int n,q,size;
    vector<pair<ll,int> >vec[1005];
    void push(int x){
    	if(flag[x]==0) return ;
    	for(int i=(x-1)*size+1;i<=min(n,size*x);i++) a[i]+=flag[x];
    	flag[x]=0;
    }
    void add(int l,int r,ll vul){
    	push(p[l]);
    	for(int i=l;i<=min(r,size*p[l]);i++) a[i]+=vul;
    	vec[p[l]].clear();
    	for(int i=(p[l]-1)*size+1;i<=min(n,size*p[l]);i++) vec[p[l]].push_back(make_pair(a[i],i));
    	sort(vec[p[l]].begin(),vec[p[l]].end());
    	if(p[l]!=p[r]){
    		push(p[r]);
    		for(int i=(p[r]-1)*size+1;i<=r;i++) a[i]+=vul;
    		vec[p[r]].clear();
    		for(int i=(p[r]-1)*size+1;i<=min(n,size*p[r]);i++) vec[p[r]].push_back(make_pair(a[i],i));
    		sort(vec[p[r]].begin(),vec[p[r]].end());
    	}
    	for(int i=p[l]+1;i<=p[r]-1;i++) flag[i]+=vul;
    }
    int querty(ll x){
    	int mx=-1*INF;int mn=INF;
    	for(int i=1;i<=p[n];i++){
    		int l=1;int r=vec[i].size();int ans=0;
    		ll xx=x-flag[i];
    		while(l<=r){
    			int mid=(l+r)>>1;
    			if(vec[i][mid-1].first>=xx){
    				ans=mid;r=mid-1;
    			}
    			else l=mid+1;
    		}
    		if(ans==0||vec[i][ans-1].first!=xx) continue;
    		mn=min(mn,vec[i][ans-1].second);
    		l=1;r=vec[i].size();
    		while(l<=r){
    			int mid=(l+r)>>1;
    			if(vec[i][mid-1].first<=xx){
    				ans=mid;l=mid+1;
    			}
    			else r=mid-1;
    		}
    		mx=max(mx,vec[i][ans-1].second);
    	}
    	if(mn==INF) return -1;
    	return mx-mn;
    }
    int main(){
    	ios::sync_with_stdio(false);
    	n=read();q=read();size=(int)sqrt(n);
    	for(int i=1;i<=n;i++){
    		a[i]=read();p[i]=(i-1)/size+1;
    		vec[(i-1)/size+1].push_back(make_pair(a[i],i));
    	}
    	for(int i=1;i<=p[n];i++) sort(vec[i].begin(),vec[i].end());
    	int op,l,r;ll vul;
    	for(int i=1;i<=q;i++){
    		op=read();
    		if(op==1){
    			l=read();r=read();vul=read();
    			add(l,r,vul);
    		}
    		else{
    			vul=read();
    			printf("%d
    ",querty(vul));
    		}
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    7.JavaScript-Promise的并行和串行
    6.Javascript如何处理循环的异步操作
    5.Javascript闭包得实现原理和作用
    4.Javascript中实现继承的几种方法及其优缺点
    3.Javascript实现instanceof
    BEF
    ant-vue Table组件selectedRows翻页后不保留上一页已选
    js 构造函数、继承
    Vue全局注册组件
    react迷惑的点(一)
  • 原文地址:https://www.cnblogs.com/wang9897/p/8440334.html
Copyright © 2011-2022 走看看