# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
797087 | Shithila | Aliens (IOI16_aliens) | C++14 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
using namespace std;
const int mod = 1e9;
int main()
{
int n;
int m;
cin>>n>>m;
int arr[n];
int blocksize=350;
vector<int> cos((n/blocksize)+1);
vector<multiset<int> > chek((n/blocksize)+1);
for(int ll=0;ll<n;ll++)
{
cin>>arr[ll];
chek[ll/blocksize].insert(arr[ll]);
}
for(int ll=0;ll<m;ll++)
{
char com;
cin>>com;
if(com=='+')
{
int l;
int r;
int x;
cin>>l>>r>>x;
l--;
r--;
for(int i=l;i<=r;)
{
if(i%blocksize==0 && i+blocksize<r)
{
cos[i/blocksize]+=x;
i+=blocksize;
}
else
{
chek[i/blocksize].erase(chek[i/blocksize].find(arr[i]));
arr[i]=arr[i]+x;
chek[i/blocksize].insert(arr[i]);
i++;
}
}
}
else
{
int l;
int r;
int y;
cin>>l>>r>>y;
l--;
r--;
bool found=false;
for(int i=l;i<=r;)
{
if(i%blocksize==0 && i+blocksize<r)
{
if(chek[i/blocksize].find(y-cos[i/blocksize])!=chek[i/blocksize].end())
{
found=true;
}
i+=blocksize;
}
else
{
if(arr[i]+cos[i/blocksize]==y)
{
found=true;
}
i++;
}
}
if(found==true)
{
cout<<"YES"<<endl;
}
else cout<<"NO"<<endl;
}
}
}