首页 > 其他分享 >【题解 P3586】 LOG

【题解 P3586】 LOG

时间:2023-10-11 12:55:38浏览次数:30  
标签:LOG qw 题解 1000005 long NIE leq P3586 TAK

[POI2015] LOG

题目描述

维护一个长度为 \(n\) 的序列,一开始都是 \(0\),支持以下两种操作:

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

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

输入格式

第一行包含两个正整数 \(n,m\),分别表示序列长度和操作次数。

接下来 \(m\) 行为 \(m\) 个操作。

输出格式

包含若干行,对于每个 Z 询问,若可行,输出 TAK,否则输出 NIE

样例 #1

样例输入 #1

3 8
U 1 5
U 2 7
Z 2 6
U 3 1
Z 2 6
U 2 2
Z 2 6
Z 2 1

样例输出 #1

NIE
TAK
NIE
TAK

提示

【数据范围】

对于 \(100\%\) 的数据,\(1\leq n,m\leq 10^6\),\(1\leq k,c\leq n\),\(0\leq a\leq 10^9\),\(1\leq s\leq 10^9\)。


原题名称:Logistyka。

解析

单点修改很好做,重点是如何维护查找操作。
最开始很容易想出来一个错误的思路,找他们总共的和是否大于 \(c \times s\) 。
但是,有一些数大于 \(s\) ,是不能做到 \(s\) 次的。
但是,一个数能贡献的价值只会有两个限制,一是它数本身的大小,二是 \(s\) ,所以单个数的贡献为 \(min(s,a_i)\) 。
分开统计,$a_i $ 大于 \(s\) 的直接让 \(c\) 减掉,小于 \(s\) 的统计和就好了。
我们只需要先做一遍离散化,然后开两个树状数组,一个统计每个位上有多少个数,用于做 \(a_i\) 大于 \(s\) 的情况,一个统计和,用于做第二种情况。
时间复杂度 \(O(mlogm)\)

Code

#include<bits/stdc++.h>
using namespace std;
struct datay
{
	char x;
	long long y,z;
}l[1000005];
long long n,m,a[1000005],f[1000005],d[1000005],p[1000005];
set<long long> q;
map<long long,long long> w;
long long lowbit(long long x)
{
	return x&(-x);
}
void dijah1(long long x,long long y)
{
	for(int i=x;i<=1000000;i+=lowbit(i))f[i]+=y;
	return;
}
void dijah2(long long x,long long y)
{
	for(int i=x;i<=1000000;i+=lowbit(i))d[i]+=y;
	return;
}
long long gaia1(long long x)
{
	long long h=0;
	while(x)
	{
		h+=f[x];
		x-=lowbit(x);
	}
	return h;
}
long long gaia2(long long x)
{
	long long h=0;
	while(x)
	{
		h+=d[x];
		x-=lowbit(x);
	}
	return h;
}
int main()
{
	scanf("%lld%lld",&n,&m);
	for(int i=1;i<=m;i++)
	{
		cin>>l[i].x>>l[i].y>>l[i].z;
		q.insert(l[i].z);
	}
	long long g=0;
	set<long long>::iterator qw=q.begin();
	for(;qw!=q.end();qw++)
	{
		w[*qw]=++g;
		p[g]=*qw;
	}
	p[0]=0;
	for(int i=1;i<=m;i++)l[i].z=w[l[i].z];
	for(int i=1;i<=m;i++)
	{
		if(l[i].x=='U')
		{
			if(p[a[l[i].y]]!=0)dijah1(a[l[i].y],-p[a[l[i].y]]),dijah2(a[l[i].y],-1);
			a[l[i].y]=l[i].z;
			if(p[a[l[i].y]]!=0)dijah1(a[l[i].y],p[a[l[i].y]]),dijah2(a[l[i].y],1);
		}
		else
		{
			if(gaia1(l[i].z)>=(l[i].y-gaia2(1000000)+gaia2(l[i].z))*p[l[i].z])printf("TAK\n");
			else printf("NIE\n");
		}
	}







  return 0;
}

标签:LOG,qw,题解,1000005,long,NIE,leq,P3586,TAK
From: https://www.cnblogs.com/dijah/p/17756818.html

相关文章

  • scala配置log4j+slf4j
    scala配置log4j+slf4j环境信息jdk17scala2.11.0导入依赖<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-reload4j</artifactId><version>2.0.9</version></dependency>添加配置文件resource目录下新建lo......
  • 题解 AcWing 359.创世纪
    题目描述给你一个\(n\)个点\(n\)条边的有向图,若选了当前节点,那么当前节点的儿子节点至少有一个不能选。求最多能选多少个点。具体思路显然是一棵基环树,因此考虑基环树dp。我们先不管环的条件,先考虑朴素的树形dp。设\(f_{x,0}\)表示\(x\)节点不选,最多可以选多少个......
  • 【转】loguru,一个神奇的 python 库
    转载来源:微信公众号:程序员学长 https://mp.weixin.qq.com/s/csxPONEaUbTdoRMd9opuMw大家好,我是小寒。今天给大家分享一个神奇的python库,loguruhttps://github.com/Delgan/loguruLoguru是一个旨在为Python带来愉快的日志记录的库,它可以完全增强你的日志记录体验,并且非常......
  • 什么是Apache Access Log中的OPTIONS *的含义
    访问日志在Apache的AccessLog中会看到很多如下的访问日志:127.0.0.1--[05/May/2011:10:54:07+0800]"OPTIONS*HTTP/1.0"200-127.0.0.1--[05/May/2011:10:54:08+0800]"OPTIONS*HTTP/1.0"200-127.0.0.1--[05/May/2011:10:54:09+0800]"OPTIONS......
  • 网络规划设计师真题解析--位示图大小计算
    假设某计算机的字长为32位,该计算机文件管理系统磁盘空间管理采用位示图,记录磁盘的使用情况,若磁盘的容量为300GB,物理块的大小为4MB,那么位示图的大小为(2)个字。(2020年)(2)A.2400 B.3200 C.6400 D.9600答案:A解析:已知磁盘容量为300GB,物理块大小为4MB则计算物理块数=300*1024/4=76800(个)位......
  • 题解: CF768D Jon and Orbs
    题解:CF768DJonandOrbs一句话体面:有k种不同的物品,每天等概率任取一种(不一定是新的种类)。q组询问,每组给出一个p,问取完这k件物品的概率不小于\(\frac{p}{2000}\)的最小天数不用说,肯定是概率DP了1.定义:\(f_{i,j}\)表示前\(i\)天选取了\(j\)种物品的概率(\(P.S.\)该定义不......
  • 题解 DIFERENC - DIFERENCIJA
    题目描述给出一个长度为\(n\)的序列\(a_i\),求出下列式子的值:\[\sum_{i=1}^n\sum_{j=i}^n(\max\limits_{i\lek\lej}a_k-\min\limits_{i\lek\lej}a_k)\]即定义一个子序列的权值为序列内最大值与最小值的差。求出所有连续子序列的权值和。具体思路暴力思路很好......
  • CTFer blogs--Web-fileinclude
    本题来源攻防世界解题思路:首先分析代码,将cookie中‘language’的值传入lan在后续又使用include调用了lan这个变量,因此可以从此处写入读取flag.php的payload可以使用burpsuite进行抓包后添加cookie值name:languagevalue:php://filter/read=convert.base64-encode/resource=/var......
  • p4801题解
    解题思路:确实是一道很好的贪心,但由于加上了水这个影响因素,使题目复杂度上升了不少。(考虑的东西多了嘛)输个入。对饼干温度无脑排序。求最小值。求最大值(用双指针做,后面会讲)。解题过程:先输入(这个步骤就不用我讲了)inta[1000005];longlongn,ws;longlongmin......
  • 洛谷P4158 [SCOI2009] 粉刷匠 题解
    所有的\(DP\),只要式子一推出来(不管复杂度),那就很简单了,因为优化是成千上万种的……思路1:我们考虑设\(f[i][j][k]\)表示:当前\(DP\)到第\(i\)块木板的第\(j\)个位置,共涂了\(k\)次,所能获得的最大收益。因为还要枚举当前这次涂是从哪到哪的,因此复杂度为\(O(NM^2T)\),实......