#include<bits/stdc++.h>
using namespace std;
#define MAX 10000000
long int arr[1000000];
long int tree[MAX] ; // To store segment tree
long int lazy[MAX] ; // To store pending updates
void updateRangeUtil(long int si, long int ss, long int se, long int us,
long int ue, long int diff)
{
if (lazy[si] != 0)
{
tree[si] += (se-ss+1)*lazy[si];
if (ss != se)
{
lazy[si*2 + 1] += lazy[si];
lazy[si*2 + 2] += lazy[si];
}
lazy[si] = 0;
}
if (ss>se || ss>ue || se<us)
return ;
// Current segment is fully in range
if (ss>=us && se<=ue)
{
// Add the difference to current node
tree[si] += (se-ss+1)*diff;
// same logic for checking leaf node or not
if (ss != se)
{
lazy[si*2 + 1] += diff;
lazy[si*2 + 2] += diff;
}
return;
}
// If not completely in rang, but overlaps, recur for
// children,
int mid = (ss+se)/2;
updateRangeUtil(si*2+1, ss, mid, us, ue, diff);
updateRangeUtil(si*2+2, mid+1, se, us, ue, diff);
// And use the result of children calls to update this
// node
tree[si] = tree[si*2+1] + tree[si*2+2];
}
void updateRange(long int n, long int us, long int ue, long int diff)
{
updateRangeUtil(0, 0, n-1, us, ue, diff);
}
long int getSumUtil(long int ss, long int se, long int qs,long int qe, long int si)
{
if (lazy[si] != 0)
{
tree[si] += (se-ss+1)*lazy[si];
// checking if it is not leaf node because if
// it is leaf node then we cannot go further
if (ss != se)
{
// Since we are not yet updating children os si,
// we need to set lazy values for the children
lazy[si*2+1] += lazy[si];
lazy[si*2+2] += lazy[si];
}
// unset the lazy value for current node as it has
// been updated
lazy[si] = 0;
}
// Out of range
if (ss>se || ss>qe || se<qs)
return 0;
// At this point we are sure that pending lazy updates
// are done for current node. So we can return value
// (same as it was for query in our previous post)
// If this segment lies in range
if (ss>=qs && se<=qe)
return tree[si];
// If a part of this segment overlaps with the given
// range
int mid = (ss + se)/2;
return getSumUtil(ss, mid, qs, qe, 2*si+1) +
getSumUtil(mid+1, se, qs, qe, 2*si+2);
}
// Return sum of elements in range from index qs (quey
// start) to qe (query end). It mainly uses getSumUtil()
long int getSum(long int n, long int qs,long int qe)
{
// Check for erroneous input values
if (qs < 0 || qe > n-1 || qs > qe)
{
// printf("Invalid Input");
return -1;
}
return getSumUtil(0, n-1, qs, qe, 0);
}
// A recursive function that constructs Segment Tree for
// array[ss..se]. si is index of current node in segment
// tree st.
void constructSTUtil(long int arr[], long int ss, long int se, long int si)
{
// out of range as ss can never be greater than se
if (ss > se)
return ;
// If there is one element in array, store it in
// current node of segment tree and return
if (ss == se)
{
tree[si] = arr[ss];
return;
}
int mid = (ss + se)/2;
constructSTUtil(arr, ss, mid, si*2+1);
constructSTUtil(arr, mid+1, se, si*2+2);
tree[si] = tree[si*2 + 1] + tree[si*2 + 2];
}
void constructST(long int arr[], long int n)
{
// Fill the allocated memory st
constructSTUtil(arr, 0, n-1, 0);
}
int main()
{
long int n,m,c,q,u,v,k;
char ch;
scanf("%ld%ld%ld",&n,&m,&c);
memset(arr,c,n*sizeof(long int));
constructST(arr, n);
while(m--)
{
while ((getchar()) != '\n');
scanf("%c",&ch);
if(ch=='Q')
{
scanf("%ld",&q);
printf("%ld\n",getSum(n, q-1, q-1));
}
else if(ch=='S')
{ scanf("%ld%ld%ld",&u,&v,&k);
updateRange(n, u-1, v-1, k);
}
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgTUFYIDEwMDAwMDAwCmxvbmcgaW50IGFyclsxMDAwMDAwXTsKCmxvbmcgaW50IHRyZWVbTUFYXSA7ICAvLyBUbyBzdG9yZSBzZWdtZW50IHRyZWUKbG9uZyBpbnQgbGF6eVtNQVhdIDsgIC8vIFRvIHN0b3JlIHBlbmRpbmcgdXBkYXRlcwoKdm9pZCB1cGRhdGVSYW5nZVV0aWwobG9uZyBpbnQgc2ksIGxvbmcgaW50IHNzLCBsb25nIGludCBzZSwgbG9uZyBpbnQgdXMsCiAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50IHVlLCBsb25nIGludCBkaWZmKQp7CgogICAgaWYgKGxhenlbc2ldICE9IDApCiAgICB7CgogICAgICAgIHRyZWVbc2ldICs9IChzZS1zcysxKSpsYXp5W3NpXTsKCiAgICAgICAgaWYgKHNzICE9IHNlKQogICAgICAgIHsKCiAgICAgICAgICAgIGxhenlbc2kqMiArIDFdICAgKz0gbGF6eVtzaV07CiAgICAgICAgICAgIGxhenlbc2kqMiArIDJdICAgKz0gbGF6eVtzaV07CiAgICAgICAgfQoKICAgICAgICBsYXp5W3NpXSA9IDA7CiAgICB9CgoKICAgIGlmIChzcz5zZSB8fCBzcz51ZSB8fCBzZTx1cykKICAgICAgICByZXR1cm4gOwoKICAgIC8vIEN1cnJlbnQgc2VnbWVudCBpcyBmdWxseSBpbiByYW5nZQogICAgaWYgKHNzPj11cyAmJiBzZTw9dWUpCiAgICB7CiAgICAgICAgLy8gQWRkIHRoZSBkaWZmZXJlbmNlIHRvIGN1cnJlbnQgbm9kZQogICAgICAgIHRyZWVbc2ldICs9IChzZS1zcysxKSpkaWZmOwoKICAgICAgICAvLyBzYW1lIGxvZ2ljIGZvciBjaGVja2luZyBsZWFmIG5vZGUgb3Igbm90CiAgICAgICAgaWYgKHNzICE9IHNlKQogICAgICAgIHsKCiAgICAgICAgICAgIGxhenlbc2kqMiArIDFdICAgKz0gZGlmZjsKICAgICAgICAgICAgbGF6eVtzaSoyICsgMl0gICArPSBkaWZmOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICB9CgogICAgLy8gSWYgbm90IGNvbXBsZXRlbHkgaW4gcmFuZywgYnV0IG92ZXJsYXBzLCByZWN1ciBmb3IKICAgIC8vIGNoaWxkcmVuLAogICAgaW50IG1pZCA9IChzcytzZSkvMjsKICAgIHVwZGF0ZVJhbmdlVXRpbChzaSoyKzEsIHNzLCBtaWQsIHVzLCB1ZSwgZGlmZik7CiAgICB1cGRhdGVSYW5nZVV0aWwoc2kqMisyLCBtaWQrMSwgc2UsIHVzLCB1ZSwgZGlmZik7CgogICAgLy8gQW5kIHVzZSB0aGUgcmVzdWx0IG9mIGNoaWxkcmVuIGNhbGxzIHRvIHVwZGF0ZSB0aGlzCiAgICAvLyBub2RlCiAgICB0cmVlW3NpXSA9IHRyZWVbc2kqMisxXSArIHRyZWVbc2kqMisyXTsKfQoKdm9pZCB1cGRhdGVSYW5nZShsb25nIGludCBuLCBsb25nIGludCB1cywgbG9uZyBpbnQgdWUsIGxvbmcgaW50IGRpZmYpCnsKICAgdXBkYXRlUmFuZ2VVdGlsKDAsIDAsIG4tMSwgdXMsIHVlLCBkaWZmKTsKfQoKCmxvbmcgaW50IGdldFN1bVV0aWwobG9uZyBpbnQgc3MsIGxvbmcgaW50IHNlLCBsb25nIGludCBxcyxsb25nIGludCBxZSwgbG9uZyBpbnQgc2kpCnsKCiAgICBpZiAobGF6eVtzaV0gIT0gMCkKICAgIHsKCiAgICAgICAgdHJlZVtzaV0gKz0gKHNlLXNzKzEpKmxhenlbc2ldOwoKICAgICAgICAvLyBjaGVja2luZyBpZiBpdCBpcyBub3QgbGVhZiBub2RlIGJlY2F1c2UgaWYKICAgICAgICAvLyBpdCBpcyBsZWFmIG5vZGUgdGhlbiB3ZSBjYW5ub3QgZ28gZnVydGhlcgogICAgICAgIGlmIChzcyAhPSBzZSkKICAgICAgICB7CiAgICAgICAgICAgIC8vIFNpbmNlIHdlIGFyZSBub3QgeWV0IHVwZGF0aW5nIGNoaWxkcmVuIG9zIHNpLAogICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIHNldCBsYXp5IHZhbHVlcyBmb3IgdGhlIGNoaWxkcmVuCiAgICAgICAgICAgIGxhenlbc2kqMisxXSArPSBsYXp5W3NpXTsKICAgICAgICAgICAgbGF6eVtzaSoyKzJdICs9IGxhenlbc2ldOwogICAgICAgIH0KCiAgICAgICAgLy8gdW5zZXQgdGhlIGxhenkgdmFsdWUgZm9yIGN1cnJlbnQgbm9kZSBhcyBpdCBoYXMKICAgICAgICAvLyBiZWVuIHVwZGF0ZWQKICAgICAgICBsYXp5W3NpXSA9IDA7CiAgICB9CgogICAgLy8gT3V0IG9mIHJhbmdlCiAgICBpZiAoc3M+c2UgfHwgc3M+cWUgfHwgc2U8cXMpCiAgICAgICAgcmV0dXJuIDA7CgogICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBhcmUgc3VyZSB0aGF0IHBlbmRpbmcgbGF6eSB1cGRhdGVzCiAgICAvLyBhcmUgZG9uZSBmb3IgY3VycmVudCBub2RlLiBTbyB3ZSBjYW4gcmV0dXJuIHZhbHVlCiAgICAvLyAoc2FtZSBhcyBpdCB3YXMgZm9yIHF1ZXJ5IGluIG91ciBwcmV2aW91cyBwb3N0KQoKICAgIC8vIElmIHRoaXMgc2VnbWVudCBsaWVzIGluIHJhbmdlCiAgICBpZiAoc3M+PXFzICYmIHNlPD1xZSkKICAgICAgICByZXR1cm4gdHJlZVtzaV07CgogICAgLy8gSWYgYSBwYXJ0IG9mIHRoaXMgc2VnbWVudCBvdmVybGFwcyB3aXRoIHRoZSBnaXZlbgogICAgLy8gcmFuZ2UKICAgIGludCBtaWQgPSAoc3MgKyBzZSkvMjsKICAgIHJldHVybiBnZXRTdW1VdGlsKHNzLCBtaWQsIHFzLCBxZSwgMipzaSsxKSArCiAgICAgICAgICAgZ2V0U3VtVXRpbChtaWQrMSwgc2UsIHFzLCBxZSwgMipzaSsyKTsKfQoKLy8gUmV0dXJuIHN1bSBvZiBlbGVtZW50cyBpbiByYW5nZSBmcm9tIGluZGV4IHFzIChxdWV5Ci8vIHN0YXJ0KSB0byBxZSAocXVlcnkgZW5kKS4gIEl0IG1haW5seSB1c2VzIGdldFN1bVV0aWwoKQpsb25nIGludCBnZXRTdW0obG9uZyBpbnQgbiwgbG9uZyBpbnQgcXMsbG9uZyBpbnQgcWUpCnsKICAgIC8vIENoZWNrIGZvciBlcnJvbmVvdXMgaW5wdXQgdmFsdWVzCiAgICBpZiAocXMgPCAwIHx8IHFlID4gbi0xIHx8IHFzID4gcWUpCiAgICB7CiAgICAgICAvLyBwcmludGYoIkludmFsaWQgSW5wdXQiKTsKICAgICAgICByZXR1cm4gLTE7CiAgICB9CgogICAgcmV0dXJuIGdldFN1bVV0aWwoMCwgbi0xLCBxcywgcWUsIDApOwp9CgovLyBBIHJlY3Vyc2l2ZSBmdW5jdGlvbiB0aGF0IGNvbnN0cnVjdHMgU2VnbWVudCBUcmVlIGZvcgovLyAgYXJyYXlbc3MuLnNlXS4gc2kgaXMgaW5kZXggb2YgY3VycmVudCBub2RlIGluIHNlZ21lbnQKLy8gdHJlZSBzdC4Kdm9pZCBjb25zdHJ1Y3RTVFV0aWwobG9uZyBpbnQgYXJyW10sIGxvbmcgaW50IHNzLCBsb25nIGludCBzZSwgbG9uZyBpbnQgc2kpCnsKICAgIC8vIG91dCBvZiByYW5nZSBhcyBzcyBjYW4gbmV2ZXIgYmUgZ3JlYXRlciB0aGFuIHNlCiAgICBpZiAoc3MgPiBzZSkKICAgICAgICByZXR1cm4gOwoKICAgIC8vIElmIHRoZXJlIGlzIG9uZSBlbGVtZW50IGluIGFycmF5LCBzdG9yZSBpdCBpbgogICAgLy8gY3VycmVudCBub2RlIG9mIHNlZ21lbnQgdHJlZSBhbmQgcmV0dXJuCiAgICBpZiAoc3MgPT0gc2UpCiAgICB7CiAgICAgICAgdHJlZVtzaV0gPSBhcnJbc3NdOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpbnQgbWlkID0gKHNzICsgc2UpLzI7CiAgICBjb25zdHJ1Y3RTVFV0aWwoYXJyLCBzcywgbWlkLCBzaSoyKzEpOwogICAgY29uc3RydWN0U1RVdGlsKGFyciwgbWlkKzEsIHNlLCBzaSoyKzIpOwoKICAgIHRyZWVbc2ldID0gdHJlZVtzaSoyICsgMV0gKyB0cmVlW3NpKjIgKyAyXTsKfQoKdm9pZCBjb25zdHJ1Y3RTVChsb25nIGludCBhcnJbXSwgbG9uZyBpbnQgbikKewogICAgLy8gRmlsbCB0aGUgYWxsb2NhdGVkIG1lbW9yeSBzdAogICAgY29uc3RydWN0U1RVdGlsKGFyciwgMCwgbi0xLCAwKTsKfQoKaW50IG1haW4oKQp7CiAgICAKICAgIGxvbmcgaW50IG4sbSxjLHEsdSx2LGs7CiAgICBjaGFyIGNoOwogICAgc2NhbmYoIiVsZCVsZCVsZCIsJm4sJm0sJmMpOwoKICAgIG1lbXNldChhcnIsYyxuKnNpemVvZihsb25nIGludCkpOwoKICAgIGNvbnN0cnVjdFNUKGFyciwgbik7CiAgICB3aGlsZShtLS0pCiAgICB7CiB3aGlsZSAoKGdldGNoYXIoKSkgIT0gJ1xuJyk7CiAgICAgICAgc2NhbmYoIiVjIiwmY2gpOwoKICAgICAgaWYoY2g9PSdRJykKICAgICAgewogICAgICAgICAgc2NhbmYoIiVsZCIsJnEpOwogICAgICAgICAgcHJpbnRmKCIlbGRcbiIsZ2V0U3VtKG4sIHEtMSwgcS0xKSk7CiAgICAgIH0KICAgICAgIGVsc2UgaWYoY2g9PSdTJykKICAgICAgIHsgICBzY2FuZigiJWxkJWxkJWxkIiwmdSwmdiwmayk7CiAgICAgICAgICAgdXBkYXRlUmFuZ2UobiwgdS0xLCB2LTEsIGspOwogICAgICAgfQogICAgfQogICAgcmV0dXJuIDA7Cn0=