Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- typedef int ll;
- typedef unsigned long long ull;
- typedef pair<ll,ll>pll;
- typedef pair<int,int>pii;
- typedef pair<int,pair<int,int>>piii;
- typedef pair<ll,pair<ll,ll>>plll;
- #define fastread() (ios_base:: sync_with_stdio(false),cin.tie(NULL));
- #define sf(a) scanf("%I64d",&a)
- #define pf(a) printf("%I64d\n",a)
- #define mem(a,b) memset(a,b,sizeof(a))
- #define vll(v) v.begin(),v.end()
- #define all(x) x.rbegin(),x.rend()
- #define min3(a, b, c) min(a, min(b, c))
- #define F first
- #define S second
- #define minheap int,vector<int>,greater<int>
- //#define mp make_pair
- #define pb push_back
- #define pp pop_back
- #define eb emplace_back
- #define in freopen("input.txt", "r", stdin)
- #define out freopen("output.txt", "w", stdout)
- #define BOUNDARY(i, j) ((i >= 0 && i < row) && (j >= 0 && j < column))
- #define ischar(x) (('a' <= x && x <= 'z') || ('A' <= x && x <= 'Z'))
- #define isvowel(ch) ((ch=='a'||ch=='e'||ch=='i'||ch=='o'||ch=='u')||(ch=='A'|| ch=='E' || ch=='I'|| ch=='O'|| ch=='U'))
- const int Max = 1e5 + 10;
- const int Mod = 1e9 + 7;
- const double PI =3.141592653589793238463;
- bool compare(const pair<int,int> &a, const pair<int,int> &b)
- {
- return (a.first > b.first);
- }
- ll lcm(ll a,ll b)
- {
- if(a==0 || b==0)
- return 0;
- return a/__gcd(a,b)*b;
- }
- //___________________________________________________________________________________________________________________
- // CODE STARTS FROM HERE
- // MU_Codefighter2019
- //-------------------------------------------------------------------------------------------------------------------
- ll tree[2][Max];
- ll query(ll idx, ll z)
- {
- ll sum=0;
- while(idx>0)
- {
- sum+=tree[z][idx];
- idx-= idx & (-idx);
- }
- return sum;
- }
- void update(ll idx,ll x,ll n,ll z)
- {
- while(idx<=n)
- {
- tree[z][idx]+=x;
- idx+= idx & (-idx);
- }
- }
- void init()
- {
- int i,j;
- for(i=0; i<2; i++)
- for(j=0; j<Max; j++)tree[i][j]=0;
- }
- int main()
- {
- fastread();
- fastread();
- ll n,q,i;
- char ch,ah;
- while(scanf("%d %d",&n,&q)==2)
- {
- init();
- ll ara[n+1],z;
- for(i=1; i<=n; i++)
- {
- scanf("%d",&ara[i]);
- if(ara[i]<=0)
- {
- if(ara[i]==0)
- z=0;
- else if(ara[i]<0)
- {
- ara[i]=-1;
- z=1;
- }
- update(i,1,n,z);
- }
- }
- while(q--)
- {
- // n=Max;
- ll i,j,ans;
- scanf("\n%c %d %d",&ch,&i,&j);
- switch(ch)
- {
- case 'P':
- {
- ll neg=query(j,1)-query(i-1,1);
- ll zero=query(j,0)-query(i-1,0);
- if(zero)
- ans=0;
- else if(neg%2)
- ans=-1;
- else
- ans=1;
- switch(ans)
- {
- case -1:
- ah='-';
- break;
- case 1:
- ah='+';
- break;
- case 0:
- ah='0';
- }
- printf("%c",ah);
- break;
- }
- case 'C':
- if(j>0)
- {
- j=1;
- if(ara[i]==0)
- {
- update(i,-1,n,0);
- }
- else if(ara[i]<0)
- {
- update(i,-1,n,1);
- }
- ara[i]=j;
- }
- else if(j==0)
- {
- if(ara[i]<0)
- {
- update(i,-1,n,1);
- update(i,1,n,0);
- }
- else if(ara[i]>0)
- {
- update(i,1,n,0);
- }
- ara[i]=0;
- }
- else
- {
- if(ara[i]==0)
- {
- update(i,-1,n,0);
- update(i,1,n,1);
- }
- else if(ara[i]>0)
- {
- update(i,1,n,1);
- }
- ara[i]=-1;
- }
- }
- }
- printf("\n");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement