1081 선분 트 리 연습 2 codevs
4115 단어 데이터 구조
제목 설명
N 개 수 를 드 리 겠 습 니 다. 두 가지 조작 이 있 습 니 다. 1. 구간 [a, b] 의 모든 수 에 X 2 를 추가 합 니 다. i 번 째 수 는 무엇 입 니까?
설명 Input Description 을 입력 하 십시오. 첫 번 째 줄 의 정수 n 을 입력 하 십시오. 그 다음 n 줄 의 정수 n 을 입력 하고 그 다음 의 정수 Q 를 입력 하 십시오. 작업 의 개 수 를 표시 합 니 다. 그 다음 에 Q 줄 의 줄 마다 몇 개의 정수 가 있 습 니 다.첫 번 째 숫자 가 1 이면 3 개의 정수 a, b, X 를 연결 하여 구간 [a, b] 내 각 수 에 X 를 증가 시 키 고 2 라면 뒤에 1 개의 정수 i 를 따라 i 의 위 치 를 묻 는 숫자 가 얼마 인지 나타 낸다.
출력 설명 출력 설명 모든 질문 출력 줄 에 대한 답
샘플 입력 Sample Input 3
1
2
3
2
1 2 3 2
2 3
샘플 출력 샘플 출력 5
데이터 범위 및 알림 Data Size & Hint 데이터 범위
1<=n<=100000
1 < = q < = 100000 코드 는 다음 과 같 습 니 다.
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
const int N=100005;
int a[N],n,m;
int lowbit(int x)
{
return x&-x;
}
int sum(int x)
{
int s=0;
while(x>0)
{
s+=a[x];
x=x-lowbit(x);
}
return s;
}
void add(int x,int date)
{
while(x<=n)
{
a[x]+=date;
x=x+lowbit(x);
}
}
int main()
{
memset(a,0,sizeof(a));
cin>>n;
int r;
for(int i=1;i<=n;i++)
{
cin>>r;
add(i,r);
}
cin>>m;
int x,y,z,t;
for(int i=1;i<=m;i++)
{
cin>>t;
if(t==1)
{
cin>>x>>y>>z;
for(int j=x;j<=y;j++)
add(j,z);
}
else
{
cin>>x;
cout<1)<return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.