結果
| 問題 |
No.876 Range Compress Query
|
| コンテスト | |
| ユーザー |
hornistyf
|
| 提出日時 | 2020-01-05 19:15:32 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,659 bytes |
| コンパイル時間 | 811 ms |
| コンパイル使用メモリ | 92,404 KB |
| 実行使用メモリ | 5,248 KB |
| 最終ジャッジ日時 | 2024-11-22 23:07:30 |
| 合計ジャッジ時間 | 4,170 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 15 WA * 3 |
ソースコード
//yuki876.cpp
//Sun Jan 5 18:45:55 2020
#include <iostream>
#include <string>
#include <queue>
#include <map>
#include <unordered_map>
#include <vector>
#include <algorithm>
#include <math.h>
#include <set>
#define INTINF 2147483647
#define LLINF 9223372036854775807
using namespace std;
using ll=long long;
typedef pair<int,int> P;
int nodenum = 1;
int seg[400000];
void init(int n){
while (nodenum<n){
nodenum*=2;
}
fill(seg,seg+nodenum*2-1,-1);
}
void update(int index){
index = index+nodenum-1;
if (seg[index]==0){
seg[index] = 1;
}else {
seg[index] = 0;
}
while (index>0){
index = (index-1)/2;
seg[index] = seg[index*2+1]+seg[index*2+2];
}
}
int query(int a, int b, int k, int l, int r){
if (r<=a || b<=l){
return 0;
}
if (a<=l && r<=b){
return seg[k];
}else {
int val1 = query(a,b,k*2+1,l,(l+r)/2);
int val2 = query(a,b,k*2+2,(l+r)/2,r);
return val1+val2;
}
}
int main(){
int n,q;
cin >> n >> q;
init(n-1);
int a[n],b[n-1];
for (int i=0;i<n;i++){
cin >> a[i];
if (i>0){
b[i-1] = a[i]-a[i-1];
if (b[i-1]==0){
seg[nodenum-1+i-1] = 0;
}else {
seg[nodenum-1+i-1] = 1;
}
}
}
for (int i=nodenum-2;i>=0;i--){
seg[i] = seg[i*2+1]+seg[i*2+2];
}
for (int i=0;i<q;i++){
int qnum;
cin >> qnum;
if (qnum==1){
int l,r,x;
cin >> l >> r >> x;
l--;r--;
if (l>0 && b[l-1]==0){
update(l);
}
if (b[r]==0){
update(r);
}
b[l-1] += x;
b[r] -= x;
if (l>0 && b[l-1]==0){
update(l);
}
if (b[r]==0){
update(r);
}
}else{
int l,r;
cin >> l >> r;
l--;r--;
int ans = query(l,r,0,0,nodenum);
cout << ans +1 << endl;
}
}
}
hornistyf