首页 > 其他分享 >颜色

颜色

时间:2023-05-30 10:44:39浏览次数:19  
标签:ch 颜色 temp int sum leq include

颜色

题目描述

给定一个长度为 \(N\) 的颜色序列 \(C\),对于该序列中的任意一个元素,都有 \(1\leq Ci \leq M\)。对于一种颜色 \(ColorK\) 来说,区间 \([L,R]\) 内的权值定义为这种颜色在该区间中出现的次数的平方,即区间 \([L,R]\) 内中满足等于 \(ColorK\) 的元素个数的平方。

接下来给出 \(Q\) 个询问,询问区间 \([L,R]\) 内颜色 \([a,b]\) 的权值总和。

输入格式

第 \(1\) 行三个整数 \(N,M,Q\)。
分别代表序列长度,颜色总数和询问总数。

第 \(2\) 行 \(N\) 个整数,代表序列。

第 \(3\) 行到第 \(Q+2\) 行,每行 \(4\) 个整数 \(l,r,a,b\)。记上一次计算出的答案为 \(Lans\)。那么实际的 \(l,r,a,b\) 为给出 \(l,r,a,b xor\) 上 \(Lans\)。第一个询问的时候 \(Lans=0\)。

输出格式

总共 \(Q\) 行,对于每一个询问,输出权值总和。

样例 #1

样例输入 #1

4 2 3
1 1 2 2 
1 4 1 2
10 11 9 10
3 0 0 0

样例输出 #1

8
2
0

提示

\(1 \leq N,Q \leq 50000,M \leq 20000\)

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<vector>

using namespace std;

int n, m, q, block;
int c[5211314], pos[5211314];
int pre[102][102][13140 * 2], sum[102][13140 * 2];


inline int read() {
	int 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 << 1) + (x << 3) + (ch - '0');
		ch = getchar();
	}
	return x * f;
}

inline void Pretreatment() {
	for (int k = 1; k <= 20001; ++ k) {
		for(int i = 1; i <= pos[n]; ++ i) {
			sum[i][k] += sum[i - 1][k];
            //sum[i][k]表示前i个块有几个k
		}
	}
	for (int i = 1; i <= pos[n]; ++ i) {
		for (int j = i; j <= pos[n]; ++ j) {
			for(int k = 1; k <= 20001; ++ k) {
				pre[i][j][k] = pow((sum[j][k] - sum[i - 1][k]), 2) + pre[i][j][k - 1];
                //pre[i][j][k]表示i到j的块中1到k的权值总和
			}
		}
	}
	return;
}

inline int Ask(int lift, int right, int minn, int maxn) {
	int l = pos[lift], r = pos[right], nowans = 0, temp[20001] = {};
	if (l == r) {
		for (int i = lift; i <= right; ++ i) {
			if (c[i] >= minn && c[i] <= maxn) {
                //注意判断
				nowans = nowans + 2 * temp[c[i]] * 1 + 1 * 1;
                //(a+b)^2 = a^2 + 2*a*b + b^2 其中temp[c[i]]是a,新加的1是b
                //下一次的a要加1
				temp[c[i]] += 1;
                
			}
		}
		return nowans;
	}
	else {
		nowans = nowans + (pre[l + 1][r - 1][maxn] - pre[l + 1][r - 1][minn - 1]);
		for (int i = lift; i <= l * block; ++ i) {
			if (c[i] < minn || c[i] > maxn) continue;
			if (temp[c[i]] == 0) {
				temp[c[i]] = sum[r - 1][c[i]] - sum[l][c[i]];
			}
			nowans = nowans + 2 * temp[c[i]] * 1 + 1 * 1;
			temp[c[i]] ++;
		}
		for (int i = (r - 1) * block + 1; i <= right; ++ i) {
			if (c[i] < minn|| c[i] > maxn) continue;
			if (temp[c[i]] == 0) {
				temp[c[i]] = sum[r - 1][c[i]] - sum[l][c[i]];
			}
			nowans = nowans + 2 * temp[c[i]] * 1 + 1 * 1;
			temp[c[i]] ++;
		}
		return nowans;
	}
}

int main() {
	n = read();
	m = read();
	q = read();
	block = 1000;
	for (int i = 1; i <= n; ++ i) {
		c[i] = read();
		pos[i] = (i - 1) / block + 1;
		sum[pos[i]][c[i]] ++;
	}
	Pretreatment();
	int ans = 0;
	for (int i = 1, l, r, a, b; i <= q; ++ i) {
		l = read(), r = read();
		a = read(), b = read();
		l ^= ans, r ^= ans, a ^= ans, b ^= ans;
		if (l > r) swap(l, r);
		if (a > b) swap(a, b);
		ans = Ask(l, r, a, b);
		printf("%d\n",ans);
	}
	return 0;
}

标签:ch,颜色,temp,int,sum,leq,include
From: https://www.cnblogs.com/jueqingfeng/p/17442594.html

相关文章

  • vscode 自定义代码字体颜色,局部变量、全局变量、函数、宏、属性
    vscode自定义代码字体与颜色风格在setting.json中修改即可:在这里插入图片描述"editor.semanticTokenColorCustomizations":{       "enabled":true,//enableforallthemes       "rules":{           "*.static":{             ......
  • rgb颜色代码怎么透明
    在RGB颜色模式中,每个颜色通道的值范围是0到255。如果您想要使某种颜色透明,可以将该颜色的alpha通道值设置为0,其中alpha值表示颜色的不透明度,范围从0(完全透明)到1(完全不透明)。在CSS中,可以通过使用RGBA或者HSLA颜色来指定带有透明度的颜色。例如:color:rgba(255,......
  • php设置表单颜色
    代码:<!DOCTYPEhtml><html><head> <title>PHP设置表单颜色</title> <style> input[type=text],select{ padding:12px20px; margin:8px0; display:inline-block; border:1pxsolid#ccc; border-radius:4px; ......
  • Ubuntu20.04使终端用户名颜色高亮
    Ubuntu20.04使终端用户名颜色高亮问题背景你还在为你的Linux大量输出内容但是不能清晰的看到每次输入的命令而烦恼吗?找找下面图中的两条命令在哪......
  • 如何向顶点着色器传颜色?
    stringvs=@"#version330layout(location=og_positionVertexLocation)invec4position;uniformmat4og_modelViewPerspectiveMatrix;voidmain()......
  • FLEX实践—PieChart综合应用(颜色渐变、显示选中值、选中部分突出、数据钻探等)
    代码如下:(代码中附加了注释,每一种方法对应的效果均有注释)<?xmlversion="1.0"encoding="utf-8"?><mx:Applicationxmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()"> <mx:Scr......
  • shell中设置文字输出的颜色及字体格式
    转载:(15条消息)shell中设置文字输出的颜色及字体格式_linux文字顏色_庚庚911的博客-CSDN博客ANSI控制码简介ANSI控制码用于在字符显示系统中控制光标移动和字符色彩等,常用于BBS系统中。ANSIESCAPESEQUENCES又称为VT100系列控制码,国内译为ANSI控制码。顾名思义,需要VT100系......
  • Luogu P1903 [国家集训队] 数颜色 / 维护队列
    题目来源https://www.luogu.com.cn/problem/P1903[国家集训队]数颜色/维护队列题目描述墨墨购买了一套\(N\)支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问。墨墨会向你发布如下指令:\(Q\L\R\)代表询问你从第\(L\)支画笔到第\(R\)支画笔中共有几种......
  • Python输出带颜色字体
    规则“\033[”+标志符+m字符串控制着后面字符串的显示格式例子print("\033[4m这是一段文字") #下划线(4) print("\033[0;31m这是一段文字") #红字(31)print("\033[1;32;43m这是一段文字") #加粗(1);绿字(32);黄底(43)备注标志符用分号隔开,无顺序要求如果想要后面的文字......
  • as3 图像颜色渐变中使用matrix
    graphics 对象也可以绘制渐变笔触和填充,而不是纯色笔触和填充。渐变笔触是使用 lineGradientStyle() 方法创建的;渐变填充是使用 beginGradientFill() 方法创建的。 这两种方法接受相同的参数。前四个参数是必需的,即类型、颜色、Alpha 以及比率。其余四个参数是可选的,但对于......