Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define asp ""
- #define aps ''
- #define one 1
- #define two 2
- #define dif !=
- const int maxn = 1e5 + 5;
- struct Node{
- int menor,igual,maior;
- };
- vector<Node> tree(4*maxn);
- void update(int pos,int i,int j,int x,int val){
- int esq = two*pos;
- int dir = two*pos + one;
- int mid = (i+j)/two;
- if(i == j){
- if(val == 0){
- tree[pos].igual = one;
- tree[pos].menor = 0;
- tree[pos].maior = 0;
- }
- else if(val == one){
- tree[pos].igual = 0;
- tree[pos].menor = 0;
- tree[pos].maior = one;
- }
- else{
- tree[pos].igual = 0;
- tree[pos].menor = one;
- tree[pos].maior = 0;
- }
- }
- else{
- if(x <= mid) update(esq,i,mid,x,val);
- else update(dir,mid+one,j,x,val);
- tree[pos].igual = tree[esq].igual + tree[dir].igual;
- tree[pos].maior = tree[esq].maior + tree[dir].maior;
- tree[pos].menor = tree[esq].menor + tree[dir].menor;
- }
- }
- Node query(int pos,int i,int j,int l,int r){
- int esq = two*pos;
- int dir = two*pos + one;
- int mid = (i+j)/two;
- Node aux = {0,0,0};
- Node auxa = {0,0,0};
- if(i > r || j < l) return aux;
- else if(i >= l && j <= r) return tree[pos];
- else{
- aux = query(esq,i,mid,l,r);
- auxa = query(dir,mid+one,j,l,r);
- aux.igual += auxa.igual;
- aux.menor += auxa.menor;
- aux.maior += auxa.maior;
- }
- return aux;
- }
- int main(){
- int n,k;
- while(scanf("%d %d",&n,&k) == two){
- vector<char> kkk;
- for(int i=0;i<n;i++){
- int a;
- scanf("%d",&a);
- if(a < 0) a = -one;
- if(a > 0) a = one;
- update(one,0,n-one,i,a);
- }
- while(k--){
- int l, r;
- char op;
- scanf(" %c %d %d",&op,&l,&r);
- if(op == 'C'){
- l--;
- if(r > 0) r = one;
- if(r < 0) r = -one;
- update(one,0,n-one,l,r);
- continue;
- }
- l--;
- r--;
- Node ans = query(one,0,n-one,l,r);
- if(ans.igual > 0) kkk.push_back('0');
- else if(ans.menor%two == 0) kkk.push_back('+');
- else kkk.push_back('-');
- }
- for(int i=0;i<kkk.size();i++){
- printf("%c",kkk[i]);
- }
- printf("\n");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement