题目求助
  • 板块学术版
  • 楼主Ctjer
  • 当前回复5
  • 已保存回复5
  • 发布时间2021/7/16 15:03
  • 上次更新2023/11/4 14:39:08
查看原帖
题目求助
464170
Ctjer楼主2021/7/16 15:03

脑子废了,脑细胞没了

用差分好像也会超时

只能求大佬了/cy

伊芙利特 “大地,沸腾吧!” 题目背景 伊芙利特是一只快乐的小火龙,鉴于她的攻击范围(详见T1攻击范围1)较为奇特,这引起了她的烦恼,比如她经常控制不住火力,降低了合约的难度(划)。 由于很显然你无法为她控制火力,所以她只需要你报告某些点的火力值就行了

题目内容 伊芙利特的攻击范围可以看做一个1*N的长条,每个格子有一个火力值Ai(编号从1开始,初始全为0) 现在伊芙利特有M次操作,操作有两种:修改或询问 修改操作:将l~r区间内每个格子的火力值增加k 查询操作:询问p个格子(编号为P1,P2…Pp)的火力值之和

输入格式 第一行两个整数N,M 接下来M行,每行第一个数opt(表示何种操作)和若干个整数 若opt=1(修改操作),则接下来三个整数l r k 若opt=2(查询操作),则接下来一个整数p 和p个整数P1,P2…Pp 每行中的整数用空格隔开 数据的意义详见题目内容

输出格式 对于每个询问,输出火力值的和

对于20%的数据 N≤10

对于40%的数据 N≤5000

对于60%的数据 N≤100000

对于另外20%的数据 M≤400 p≤400

对于100%的数据1≤l≤r≤N≤10710^7 1≤M≤2000 1≤p≤2000 1≤x≤10^8 1≤Pi≤N 不保证P中数不重复,不保证P中数升序排列

可能要用到STL

求代码和算法

#include<bits/stdc++.h>
using namespace std;
inline int read()
{
	int X=0; bool flag=1; char ch=getchar();
	while(ch<'0'||ch>'9') {if(ch=='-') flag=0; ch=getchar();}
	while(ch>='0'&&ch<='9') {X=(X<<1)+(X<<3)+ch-'0'; ch=getchar();}
	if(flag) return X;
	return ~(X-1);
}
int n,m;
long long f[10000005];
int main()
{
	freopen("dragon.in","r",stdin);
	freopen("dragon.out","w",stdout);
	n=read();m=read();
	int p;
	int l,r,k;
	int a;
	for(int i=0;i<m;i++){
		p=read();
		if(p==1){
			l=read();
			r=read();
			k=read();
		}
	}
	return 0;
} 
2021/7/16 15:03
加载中...