zoukankan      html  css  js  c++  java
  • 【洛谷P3586】LOG

    题目

    题目链接:https://www.luogu.com.cn/problem/P3586
    维护一个长度为 (n) 的序列,一开始都是 (0),支持以下两种操作:

    1. U k a 将序列中第 (k) 个数修改为 (a)
    2. Z c s 在这个序列上,每次选出 (c) 个正数,并将它们都减去 (1),询问能否进行 (s) 次操作。

    每次询问独立,即每次询问不会对序列进行修改。

    思路

    题目等价于

    对于一次询问,书架上书本数超过 (s) 的一定最多只可取 (s) 本,剩余的书本在最优情况下一定存在一种方案没有人取到相同的书。
    可以感性理解一下。
    所以我们直接离散化之后用两棵权值树状数组维护一下小于 (k) 的数的和以及小于 (k) 的数的数量即可。
    时间复杂度 (O(nlog n))

    代码

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    
    const int N=1000010;
    int n,m,tot,a[N],b[N],X[N],Y[N];
    char opt[N][3];
    
    struct BIT
    {
    	ll c[N];
    	
    	void add(int x,ll v)
    	{
    		if (!x) return;
    		for (int i=x;i<=tot;i+=i&-i)
    			c[i]+=v;
    	}
    	
    	ll query(int x)
    	{
    		ll sum=0;
    		for (int i=x;i;i-=i&-i)
    			sum+=c[i];
    		return sum;
    	}
    }bit1,bit2;
    
    int main()
    {
    	freopen("book.in","r",stdin);
    	freopen("book.out","w",stdout);
    	scanf("%d%d",&n,&m);
    	for (int i=1;i<=m;i++)
    	{
    		scanf("%s%d%d",&opt[i],&X[i],&Y[i]);
    		b[i]=Y[i];
    	}
    	b[m+1]=0;
    	sort(b+1,b+2+m);
    	tot=unique(b+1,b+2+m)-b-1;
    	for (int i=1;i<=m;i++)
    		Y[i]=lower_bound(b+1,b+1+tot,Y[i])-b;
    	bit2.add(1,n);
    	for (int i=1;i<=n;i++)
    		a[i]=1;
    	for (int i=1;i<=m;i++)
    		if (opt[i][0]=='U')
    		{
    			bit1.add(a[X[i]],-b[a[X[i]]]);
    			bit2.add(a[X[i]],-1);
    			a[X[i]]=Y[i];
    			bit1.add(a[X[i]],b[a[X[i]]]);
    			bit2.add(a[X[i]],1);
    		}
    		else
    		{
    			if (bit1.query(Y[i])+1LL*(n-bit2.query(Y[i]))*b[Y[i]]>=1LL*X[i]*b[Y[i]]) printf("TAK
    ");
    				else printf("NIE
    ");
    		}
    	return 0;
    }
    
  • 相关阅读:
    sql优化
    mysql_存储过程_后一行减去前一行
    python基础笔记
    atom使用markdown
    tensorboard遇到的坑
    WordPaster-Firefox浏览器控件安装方法
    WordPaster.exe安装教程
    Web大文件上传控件-bug修复-Xproer.HttpUploader6
    Web大文件下载控件更新-Xproer.HttpDownloader
    Web大文件上传控件-asp.net-bug修复-Xproer.HttpUploader6.2
  • 原文地址:https://www.cnblogs.com/stoorz/p/13914513.html
Copyright © 2011-2022 走看看